У меня есть сценарий makeself
, который, как я ожидаю, будет выполняться как root; Это настольный установщик.Есть сценарий обнаружения гном сессии
В конце сценария программное обеспечение, которое недавно было установлено в файловую систему, пытается запустить в пользовательском пространстве.
Это хорошо работает с использованием 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
?
Обратите внимание, что хотя я и предпочитаю использовать код export JAVA_OPTS
, я предпочитаю не использовать жесткий код export JAVA_OPTS
. Я предпочитаю продолжать использовать методы обнаружения Oracle для поддержки, долговечности и масштабируемости.
Update: В 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
, а также (оптимистичная) попытка в dbus-launch
.
Я хотел бы конкретно упомянуть об этой помощи @ dyorgio. Он предоставил мне логику '/ proc/$ pid/environ' на другом справочном форуме, который составляет 50% от вышеуказанного решения. Благодаря! – tresf