我有一個makeself
腳本,我期望以root身份運行;這是一個桌面安裝程序。有腳本檢測gnome會話
在腳本結尾處,最近安裝到文件系統的軟件嘗試在用戶空間中啓動。
這種運作良好,使用sudo -u $(logname) /path/to/application
(或交替sudo -u $SUDO_USER ...
in Ubuntu 16.04),然而從用戶的關鍵環境變量缺失:
GNOME_DESKTOP_SESSION_ID
我需要GNOME_DESKTOP_SESSION_ID
因爲孩子的過程屬於Java和Java使用這個環境變量檢測GtkLookAndFeel。
但嘗試使用sudo -i
失敗。
從一些基本的測試,該GNOME_DESKTOP_SESSION_ID
不會出現是一個自然的環境變量時在該用戶的日誌。例如,如果我CTRL+ALT+F1
給終端,env |grep GNOME
產生什麼而XTerm
和gnome-terminal
都得到GNOME_DESKTOP_SESSION_ID
。
如何在安裝程序腳本中保留此GNOME_DESKTOP_SESSION_ID
變量而無需用戶將諸如-E
參數之類的內容傳遞給sudo
命令?請注意,儘管GtkLookAndFeel
是Linux的主要外觀,但我更願意不對export JAVA_OPTS
進行硬編碼,但我更願意繼續回退到Oracle的檢測技術以獲得支持,延長壽命和可擴展性的原因。
更新:在Ubuntu中,GNOME_DESKTOP_SESSION_ID
生活/usr/share/upstart/sessions/xsession-init.conf
initctl set-env --global GNOME_DESKTOP_SESSION_ID=this-is-deprecated
導致使用initctl get-env
進行檢索。不幸的是,這在新的sudo
shell中沒有幫助,也沒有任何(樂觀)嘗試在。
我想特別提一下@ dyorgio在這方面的幫助。他在另一個幫助論壇上向我提供了'/ proc/$ pid/environ'邏輯,該論壇是上述解決方案的50%。謝謝! – tresf