Это моя программа, и она работает очень хорошо.
import subprocess
result = subprocess.check_output("wmctrl -l",shell=True,stderr=subprocess.STDOUT)
result = result.decode('UTF-8')
print(result)
Вывод:
0x03800003 -1 name-PC Desktop
0x03e00037 0 name-PC How to fix wmctrl Cannot open display when Python open subprocess - Stack
Overflow - Firefox
0x05000006 0 name-PC name@name-PC: ~
0x05a00001 0 name-PC pr.py — ~/Program — Atom
0x05001c85 0 name-PC Terminal
Но если я хочу запустить эту программу при запуске от имени пользователя root в Linux Mint IЕсть проблемы.Я хочу запустить этот файл py при запуске как root, но я не знаю, как это сделать.Главный вопрос - как это сделать.
Это моя попытка решить проблему.Это не работает.
Я добавил файл pr.service
в папку /etc/systemd/system/
:
[Unit]
After=network.target
[Service]
ExecStart=/usr/local/bin/pr.sh
[Install]
WantedBy=default.target
Я создал файл pr.sh в папке /usr/local/bin/
:
#!/bin/bash
/usr/bin/python3 '/home/name/Program/pr.py'
Я использовал эти команды:
sudo chmod 744 /usr/local/bin/pr.sh
sudo chmod 664 /etc/systemd/system/pr.service
sudo systemctl daemon-reload
sudo systemctl enable pr.service
Если я запускаю свою программу с командой
systemctl start pr.service
, я вижу эту ошибку с командой
sudo journalctl -u pr.service
У меня есть ошибка команды subprocess.CalledProcess Error: Команда 'wmctrl -l' вернула ненулевое состояние выхода 1.
Я могу изменить свой py-файл, например, я могу запустить
result = subprocess.check_output("/usr/bin/wmctrl -l",shell=True,stderr=subprocess.STDOUT)
Я могу изменить свой py-файл, чтобы увидеть ошибку:
import subprocess
try:
result = subprocess.check_output("/usr/bin/wmctrl -l -p",shell=True,stderr=subprocess.STDOUT)
result = result.decode('UTF-8')
except subprocess.CalledProcessError as e:
raise RuntimeError("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))
print(result)
RuntimeError: команда '/ usr / bin / wmctrl -l -p' возвращает с ошибкой (код 1): b'Не открыть дисплей.
Я читал об этой попытке найти решение: https://linuxconfig.org/how-to-automatically-execute-shell-script-at-startup-boot-on-systemd-linux
Это статья о том, как автоматически запускать скрипт в Linux от имени пользователя root.Я сделал эти вещи.
Моя главная цель - автоматически запустить мою программу от имени root:
import subprocess
try:
result = subprocess.check_output("/usr/bin/wmctrl -l -p",shell=True,stderr=subprocess.STDOUT)
result = result.decode('UTF-8')
except subprocess.CalledProcessError as e:
raise RuntimeError("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))
print(result)
Вам не нужно находить ошибку в моем решении.Будет интересно найти какое-либо решение.