Хотя я не отвечаю на ваш вопрос напрямую, я думаю, что есть люди, которые могли оказаться здесь из-за той же проблемы.
Этот скрипт, который я сделал, является обходным решением для людей, которым необходимо запустить графическое приложение (, например Gedit , Synaptic или GParted)как root через sudo в сеансе Wayland :
https://gist.github.com/wachambo/bd22e12db2d5a46dc109bd0d553733be
Импортировано сюда:
#!/usr/bin/env bash
#
# Enable root access to x-windows system.
#
# Motivation: Trying to run a graphical application as root via su, sudo in a
# Wayland session (e.g. GParted or Gedit), will fail. Apps which use polkit to
# request administrator permissions for just certain operations and only when
# needed are not affected (they are not started as root right away).
# [1] https://bugzilla.redhat.com/show_bug.cgi?id=1274451
#
# Based on a Reddit comment.
# [2] https://www.reddit.com/r/Fedora/comments/5eb633/solution_running_graphical_app_with_sudo_in/
if (( $# != 1 )); then
echo "Illegal number of parameters."
echo
echo "Usage: wsudo [command]"
exit 1
fi
for cmd in sudo xhost; do
if ! type -P $cmd &>/dev/null; then
echo "$cmd it's not installed. Aborting." >&2
exit 1
fi
done
xhost +SI:localuser:root
sudo $1
#disable root access after application terminates
xhost -SI:localuser:root
#print access status to allow verification that root access was removed
xhost
Неверный вывод -Возможность изменения среды процесса извне процесса.
Допустим, вы запустили скрипт ruby
.
Это запускает экземпляр оболочки bash с переменными окружения, в котором интерпретатор ruby начинает наследовать текущую среду экземпляра оболочки bash и, возможно, добавляет некоторые новые переменные окружения, специфичные для интерпретатора.
Каждая запущенная программа получает process id
или pid
. Окружение процесса хранится в /proc/<pid>/environ
, которое доступно только для чтения и не может быть изменено извне -, как указано здесь изменить окружение запущенного процесса
Пока работает ваш скрипт ruby, родительский экземпляр bash тоже работает. Этот экземпляр bash не читает измененные переменные env и не наследует и не распространяет новые переменные на свой дочерний элемент:
$ pstree -p | grep ruby
bash(1234)---ruby(5678)
вы можете найти свои env.vars с помощьюxargs -n 1 -0 < /proc/5678/environ | grep MYVAR
Единственный способ получить новые измененные переменные среды во время работы скрипта — это запустить новый экземпляр bash/ruby и выйти из старого.
Возможный неправильный вывод -скрипт постоянно читает из env -скрипт получает уведомление, когда env изменяется -env не кэшируется интерпретатором.
Обычно скрипт инициализирует чтение env vars. только при запуске скрипта и продолжает использовать внутренние переменные во время выполнения, а не env _vars. Даже если бы изменение процесса env извне было возможно, и скрипт постоянно считывает переменные среды -, env может быть кешированной копией, а не реальной сделкой.
(пример питона)
# start
key = os.environ.get('MYVAR')
# do something with key until scripts ends
Ответы:
openssl rand -hex 32
и время от времени считывал результат в переменную. /path/data
в переменную, генерируемую cron, с выводом из openssl rand -hex 32
. sudo # see switches -i -u and --)
, как упоминалось в комментариях, пользовательская среда env может быть установлена в profile.d что -делать --скрипты -в -и т. д. -профиль -д -делать