0
nennen würde Ich mag ein Skript als systemd Dienst auszuführen, die systemd Dienst kann nicht i3 --get-socketpath
i3 --get-socketpath
fordert jedoch sein Rückkehrcode ist immer 1, wenn ich es als systemd Dienst ausgeführt wird, obwohl es funktioniert (Rückgabecode ist 0), wenn ich den Befehl
ExecStart
manuell in meinem Terminal ausführen.
/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())
Warum funktioniert der Dienst nicht anrufen i3 --get-socketpath
? Wie man es repariert?
Wahrscheinlich ist dies, weil der systemd Dienst nicht im gleichen Umfang wie die X-Sitzung, was zu der Umgebungsvariable 'DISPLAY' nicht gestartet wird definiert. Versuchen Sie, das Schlüsselwortargument 'env = dict (os.environ, DISPLAY =": 0 ")' zum Aufruf 'Popen()' hinzuzufügen. Offensichtlich benötigt dies "Import os" und nimmt an, dass "DISPLAY" tatsächlich ": 0" innerhalb der laufenden X-Sitzung ist. – Adaephon
Danke, das funktioniert. Allerdings habe ich nicht erwähnt, dass ich tatsächlich ein Python-Skript ausführen möchte, das [i3ipc] (https://github.com/acrisci/i3ipc-python) verwendet, das den Aufruf intern durchführt, ohne das Schlüsselwortargument hinzuzufügen. Gibt es eine alternative Lösung? – maiermic