2012-05-09 37 views
2

我已經編寫了一個程序,它在登錄後在終端中以ROOT權限運行,但在重新啓動後進行XOpenDisplay(NULL)調用時失敗。該程序通過rc.local啓動,但似乎無法看到X11。UBUNTU:XOpenDisplay(NULL)在啓動序列中通過rc.local運行時失敗

我需要ROOT,因爲我使用LibUSB調用,並且如果不是ROOT,則會失敗。我可以看到程序正在ROOT權限下運行,但環境變量的檢查顯示DISPLAY沒有設置。我有一個延遲循環運行,並且在用戶登錄後進行檢查,用戶可以看到在環境變量中設置了DISPLAY,但程序不能。如果程序終止並在終端中運行,那麼它的工作原理是完美的,所以問題在於程序在啓動時無法與X11交互,並且此狀態依然存在。

我希望程序在沒有用戶登錄的情況下啓動並運行。

任何人都可以讓我知道我需要做什麼嗎?

大衛

回答

1

解決感謝tripleee。

#!/bin/sh 
/usr/bin/'my-prog' & 

一切正常:

的Ubuntu現在加入線下到/etc/lightdm/lightdm.conf

greeter-setup-script=usr/bin/'my-script' 

,其中 '我的腳本' 是使用LightDM等。

+0

祝賀修復!如果可以,請確保將答案標記爲「已接受」,以便其他人可以從您的解決方案中學習。乾杯〜 –

0

你的程序只啓動一次X11是啓動和運行。但更好的設計是製作一個以root權限運行的服務,但不使用X,並安排X客戶端以某種方式與之通話。如果沒有X就不能存在,請勾選X11啓動順序,而不是系統啓動。

+0

好的。那麼如何判斷X11是否在運行?運行rc.local時不應該運行X11,因爲這發生在rc5之後,即X11啓動時發生。 – David

+0

更新了我的答案;最好不要依賴於X11的USB東西。 – tripleee

+0

那麼,我什麼時候會運行X客戶端,因爲我希望在登錄完成之前啓動並運行所有的東西?我認爲客戶會遇到同樣的問題 - 什麼時候應該運行。 – David

相關問題