VLC を実行する Systemd+ Python スクリプトでは、dbus コントロールが VLC にアクセスすることはできません。

VLC を実行する Systemd+ Python スクリプトでは、dbus コントロールが VLC にアクセスすることはできません。

さて、これは変です。私は一日中これと戦ってきましたが、これまで成功していませんでした。私はPythonベースのプロジェクトを開発しています。プロジェクトはsystemdスクリプトを介して開始されます。奇妙なことは、vlc / cvlcがある程度動作しますが、dbus制御がないことです。コマンドラインからPythonアプリケーションを実行すると、すべてが完全に実行されます。 systemdでアプリケーションを実行するのは奇妙です。

たとえば、次のコードとサービススクリプトで実行すると、dbusを使用してvlcを制御することはできません。 systemdスクリプトの外部でPythonを実行すると、dbusにアクセスできます。この問題を引き起こす原因の副作用である別の奇妙な問題があります。 1080 vidはうまく動作しますが、4kは動作しません。次のことを試して、問題が解決したら教えてください。どんな助けでも本当に感謝します。ありがとうございます!

Pythonコード(testvlc):

#!/usr/bin/env python

from subprocess import Popen, PIPE
import time

vid = 'somevideo.mp4'
cmd = 'DISPLAY=:0 cvlc -f --no-osd %s -L' % vid
Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
while True:
    print("Hello!")
    time.sleep(5)

システムスクリプト(testvlc.service):

[Unit]
Description=Test VLC From Python Script

[Service]
User=user
ExecStart=/usr/bin/screen -D -S testvlc -m /home/user/testvlc

[Install]
WantedBy=multi-user.target

ベストアンサー1

[Unit]
Description=Test VLC From Python Script

[Service]
User=user
Environment="DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus"
ExecStart=/usr/bin/screen -D -S testvlc -m /home/user/testvlc

[Install]
WantedBy=multi-user.target

また、実行すると、~/.config/systemd/user4Kを含むすべてがうまく動作します。 Wantbyを次に変更し、default.target&を追加しAfter=graphical-session.targetUser=&を削除しEnvironment=、&を使用します。systemctl --user

おすすめ記事