Обновление экранных переменных среды сессии для отражения нового графического входа в систему?

Я использую Linux, и мне нравится делать всю мою работу командной строки в рамках сессии одного экрана, так, чтобы я мог перезапустить свой графический вход в систему и такой, не теряя мои терминалы. Однако, когда я выхожу из системы и назад в мою графическую сессию, это изменяет все мои переменные среды сессии, такие как сессии DBus. Это означает, что после входа в систему снова, моя экранная сессия теперь имеет старое (и неправильно) переменные среды. Таким образом, теперь, когда я пытаюсь запустить графические программы от своей экранной сессии, в лучшем случае они испускают предупреждение о неспособности соединиться с шиной сессии. В худшем случае им не удается запуститься полностью.

Так, что я ищу, способ изменить переменные среды в рабочем экземпляре экрана, так, чтобы все впоследствии созданные экранные окна наследовали новые переменные среды. Существует ли способ сделать это?

20
задан 11.02.2010, 19:50

1 ответ

Вы не можете запустить сценарий оболочки с screen сессия, так как это наследовало бы старую среду. Вы можете однако нас FIFO для получения новых переменных среды в старую экранную сессию. Можно заполнить тот FIFO при запуске графической сессии.

#!/bin/bash
FIFO=/tmp/your_variables
[ -e $FIFO ] && cat $FIFO > /dev/null || mkfifo $FIFO

# save number of variables that follow
NVARS=2
echo $NVARS > $FIFO
echo ENV1=sth1 > $FIFO
echo ENV2=sth2 > $FIFO

Запустите тот сценарий в фоновом режиме на входе в систему (он только завершится, когда все переменные будут считаны из него).

Теперь можно читать из FIFO, например, добавить эту функцию к Вашему .bashrc

update_session() {
  FIFO=/tmp/your_variables

  NVAR=$(cat $FIFO)
  for i in $(seq $NVAR); do
    export $(cat $FIFO)
  done
  #delete the pipe, or it will not work next time 
  rm $FIFO
}

так, чтобы Вы могли в своем старом screen сессия

update_session
8
ответ дан 07.12.2019, 10:14

Теги

Похожие вопросы