我有一個 python3 腳本,它使用Gtk
-module (從 導入gi.repository
,用於最近的管理器功能),需要連結到目前的 xserver 會話(lightdm
Ubuntu 中的服務)。
透過控制台(在 xserver 會話中)手動運行它是可行的,但我希望它自動運行。
init.d 腳本將無法運作(將 DISPLAY 變數設為 0.0)。使用xvfb-run
使 init.d 腳本運行我的腳本,但按預期在虛擬 xserver 環境中運行(不是我的)。是否沒有等效的方法將 init.d 腳本連接到目前的 xserver-session?
到目前為止,我已經嘗試了一個.xinitrc
文件(在 中~/
,是的,它是可執行的),以及創建.xprofile, .xsession, .xsessionrc
所有通過ln -s
.我嘗試添加gnome-terminal &
進行測試,但終端也沒有顯示,無論是重新啟動lightdm
還是整個電腦並再次登入後。
我也嘗試過在 X 會話恢復時執行設定腳本,但這給了錯誤Can't open /usr/share/acpi-support/power-funcs
。
upstart
按照建議使用使用 lightdm 執行啟動腳本也不會提供 xserver 顯示變數(或句柄?),只需在lightdm
啟動後運行它,對嗎?
也許把它放在某個地方xorg.conf
? (如何使 xrandr 自訂永久有效?) 打敗我..
(我的腳本建立最近文件的快速列表,並將它們添加到統一啟動器的右鍵選單中,類似於 Windows:https://github.com/thirschbuechler/ubuntu-recentquicklists)
答案1
與許多情況一樣,時機是這裡的主要問題。
- 您的腳本需要在用戶級別運行登入後,因為它編輯啟動器項目,這是在使用者層級。
- 即使這樣,看看腳本應該做什麼(閱讀你的解釋),腳本需要等待一段時間才能完全加載桌面; Unity 啟動器並不是登入後第一個「準備好」的東西。
簡而言之
您需要執行腳本 appr。登入後 10-15 秒,可以透過新增以下任一方式來完成:
/bin/bash -c "sleep 15 && python /path/to/script.py"
(如果腳本不可執行),或者
/bin/bash -c "sleep 15 && /path/to/script.py"
(如果腳本是執行檔)新增至使用者的啟動應用程式:Dash > 啟動應用程式 > 新增。
運行它全部用戶
如果您需要運行腳本對於所有用戶(登入後),您可以一次將其新增至所有使用者的啟動應用程式。
為此,請將以下程式碼複製到一個空文件中,編輯各行,從以下位置開始Name=
並設定該行中腳本的正確路徑:
Exec=/bin/bash -c "sleep 15 && python /path/to/script.py"
然後將檔案儲存/etc/xdg/autostart
為launch_script.desktop
(或任何你喜歡的,只要以 結尾.desktop
)
[Desktop Entry]
Name=Name
Exec=/bin/bash -c "sleep 15 && python /path/to/script.py"
Type=Application