0
我想運行一個腳本調用systemd服務不能調用I3 --get-socketpath
i3 --get-socketpath
然而,它的返回碼始終是1,如果我運行它systemd服務systemd服務,即使它工作(返回代碼爲0),如果我在終端中手動運行ExecStart
命令。
/etc/systemd/system/my-script.service
[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/my-username/my-script.py
User=my-username
[Install]
WantedBy=multi-user.target
/home/my-username/my-script.py
import subprocess
process = subprocess.Popen(['i3', '--get-socketpath'],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
returncode = process.wait()
print('return code: {0}'.format(returncode))
print(process.stdout.read())
爲什麼服務未能致電i3 --get-socketpath
?如何解決它?
這很可能是因爲systemd服務是不一樣的範圍爲X會話內啓動,導致環境變量'DISPLAY'不是定義。嘗試將「env = dict」(os.environ,DISPLAY =「:0」)的關鍵字參數添加到「Popen()」調用中。顯然,這需要'import os',並假定在運行的X會話中'DISPLAY'實際上是':0'。 – Adaephon
謝謝,這是有效的。然而,我沒有提到我實際上喜歡運行一個使用[i3ipc](https://github.com/acrisci/i3ipc-python)的python腳本,它在內部完成了這個調用,而沒有添加關鍵字參數。有其他解決方案嗎? – maiermic