Ниже приведен очень простой пример сценария для отправки изображения через службу OBEX
(obexctl
)
import subprocess
import pexpect
import time
subprocess.run(['export $(dbus-launch)'], shell=True)
subprocess.run(['/usr/lib/bluetooth/obexd &'], shell=True)
obexchild = pexpect.spawn("obexctl", encoding='utf-8', echo=False)
obexchild.send("connect " + "AC:37:43:7B:32:50" + "\n")
time.sleep(1)
obexchild.send("send " + "/test_image.jpg" + "\n")
Это работает, когда я запускаю его из командной строки, однако, если язапустите скрипт как systemd
сервис, подобный этому:
[Unit]
Description=Serial Test
After=multi-user.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/python3.5 /home/x_user/serial_test.py
[Install]
WantedBy=multi-user.target
Мое изображение не передается.Я проверил service
, используя systemctl status serial_test.service
, и получаю это:
● serial_test.service - Serial Test
Loaded: loaded (/lib/systemd/system/serial_test.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-03-12 20:19:17 UTC; 20min ago
Main PID: 554 (python3.5)
CGroup: /system.slice/serial_test.service
├─554 /usr/bin/python3.5 /home/x_user/serial_test.py
├─742 /usr/bin/bluetoothctl
├─868 /usr/bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session
└─872 /usr/bin/obexctl
Mar 12 20:19:17 var-som-mx6 systemd[1]: Started Serial Test.
Mar 12 20:19:31 var-som-mx6 python3.5[554]: Serial Port service registered
Mar 12 20:19:31 var-som-mx6 obexd[871]: OBEX daemon 5.43
Mar 12 20:19:31 var-som-mx6 obexd[871]: manager_init failed
Mar 12 20:19:31 var-som-mx6 python3.5[554]: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
Что я понимаю, потому что он запускается без DISPLAY
.
Несколько вещей, которые япробовал systemctl --user set-environment DISPLAY=:0
Установка User=root
с или без этой строки в service
Я получаю ту же проблему.
Импорт среды systemctl --user import-environment