Ubuntu 16.04.3 LTSを実行しているOdroidには、ディスプレイデバイス(プロジェクター)と対話するpython2プログラムがあります。コマンドラインからプログラムを実行するとき:
python ~/imgProc/torcam.py
すべてが正常です。このプログラムを起動時に実行したいので、サービスファイルを作成しました。
/lib/systemd/system/torcam.service
これには次の内容が含まれています。
[Unit]
Description=Torcam Service
After=rc-local.service network-online.target
[Service]
User=root
ExecStart=/home/odroid/imgProc/starttor.sh
[Install]
WantedBy=multi-user.target
起動スクリプトstarttor.shには次のものが含まれます。
#!/bin/bash
export DISPLAY=:0
cd /home/odroid/imgProc
python ./torcam.py
コマンドラインでこのスクリプトを実行するとすべてがうまく機能しますが、起動時またはsystemctlを使用しているときにこのスクリプトを実行すると、「cannont open display::0」というエラーメッセージが表示されます。
サービスをインストールした方法は次のとおりです。
odroid@odroid:~/imgProc$ sudo systemctl enable torcam
odroid@odroid:~/imgProc$ sudo systemctl start torcam
odroid@odroid:~/imgProc$ sudo systemctl status torcam
出力は次のとおりです。
odroid@odroid:~/imgProc$ sudo systemctl status torcam
● torcam.service - Torcam Service
Loaded: loaded (/lib/systemd/system/torcam.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2016-02-12 08:39:21 EST; 6min ago
Process: 1807 ExecStart=/home/odroid/imgProc/starttor.sh (code=exited, status=1/FAILURE)
Main PID: 1807 (code=exited, status=1/FAILURE)
Feb 12 08:39:19 odroid systemd[1]: Started Torcam Service.
Feb 12 08:39:19 odroid systemd[1807]: torcam.service: Executing: /home/odroid/imgProc/starttor.sh
Feb 12 08:39:21 odroid starttor.sh[1807]: No protocol specified
Feb 12 08:39:21 odroid starttor.sh[1807]: (test:1808): Gtk-WARNING **: cannot open display: :0
Feb 12 08:39:21 odroid systemd[1]: torcam.service: Main process exited, code=exited, status=1/FAILURE
Feb 12 08:39:21 odroid systemd[1]: torcam.service: Unit entered failed state.
Feb 12 08:39:21 odroid systemd[1]: torcam.service: Failed with result 'exit-code'.
問題がディスプレイと対話するサービスの起動に関連していることはわかっていますが、起動時に機能するように有効にする方法はわかりませんでした。どんな提案がありますか?
答え1
TorcamにはXサーバーが必要であり、systemdスクリプトはXサーバーを使用するためのものではありません(スクリプトの実行時に起動しない可能性があります)。
キーボード/モニターログインを介してディスプレイデバイス/プロジェクターにアクセスするユーザーとは無関係に、このプログラムが必要な場合は、2台のXサーバー(ディスプレイ用の1つ、プロジェクター用の1つ)の使用を検討し、正しい認証torcam(man xauth
など)で始めてください。 ) プロジェクターのXサーバーが起動したとき.
Xサーバーを特定の出力に制限する方法を読む必要がありますxorg.conf
(複数の出力を持つ単一のグラフィックカードであると仮定)。また、Xサーバーの起動方法(ディスプレイマネージャなどxdm
、ディスプレイに必要なもの、または直接起動する方法)を理解する必要があります。
答え2
kirktが述べたように、私の問題は、rootとして実行されているXサーバーを使用することに関連しています。起動スクリプトを変更した後、サービスが正しく開始されるようにすることができました。
stalto.sh:
#!/bin/bash
sleep 10
export DISPLAY=:0
cd /home/odroid/imgProc
exec sudo -u odroid /bin/sh - << eof
python ./torcam.py