Linux
Linux 服務無法打開顯示
在我執行 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 時,我收到一條錯誤消息“無法打開顯示::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'.
我知道問題與啟動與顯示器互動的服務有關,但我一直堅持如何啟用它,以便它在啟動時工作。有什麼建議麼?
你的 torcam 需要一個 X 伺服器,而 systemd 腳本並不打算使用 X 伺服器(它甚至可能在腳本執行時還沒有啟動)。
如果您需要此程序獨立於通過鍵盤/顯示器登錄的使用者訪問顯示設備/投影儀,請考慮使用兩台 X 伺服器(一台用於顯示器,一台用於投影儀),並以正確的身份驗證啟動 torcam(
man xauth
等)當投影機的 X 伺服器啟動時。您需要閱讀
xorg.conf
以及如何將 X 伺服器限制為僅一些輸出(假設它是具有多個輸出的單個顯卡)。您還需要了解如何啟動 X 伺服器(顯示管理器xdm
等,您的顯示器需要什麼,而不是直接啟動)。