Как обновить DBUS_SESSION_BUS_ADDRESS в tmux при изменении этого адреса?

994
tijagi

Я заметил, что я не могу запустить steam в панели tmux: это дало мне ошибку

Error: Unable to open a connection to X. Check your DISPLAY environment variable and make sure that you have enabled X. If you are running remotely, make sure that you have a remote connection which will allow an X connection. 

Когда при этом в обычном терминале такой проблемы нет. Это привело меня к выводу, что в программной среде что-то отличается, и я был прав после экспорта среды из обоих терминалов.

$ env > /tmp/t1 $ env > /tmp/t2 

И разошлись

$ diff -u /tmp/t 

Я заметил, что DBUS_SESSION_BUS_ADDRESS отличается

-DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-CX81GDMBcL,guid=712e96f4ecdc3b9bf1eca21254ed44e3 +DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-axu0HojvNi,guid=a28fcde62f6d40aa587c708a54b83924 

Это должно быть потому, что я могу перезапустить X, и среда в tmuxсеансах не зависит от того, dbus-launchчто происходит в моей стартовой команде WM в ~ / .xinitrc:

eval exec ck-launch-session dbus-launch --sh-syntax --exit-with-session i3 &>/dev/null 

Итак, как мне обновить эту переменную при изменении адреса? ..

1

1 ответ на вопрос

1
tijagi

я тупой Мне просто нужно было переэкспортировать DBUS_SESSION_BUS_ADDRESS в мои окна tmux в сценарии автозапуска, когда я проверяю, запущен ли он или должен запуститься.

Итак, раздел, связанный с tmux в моем autorun.sh, теперь выглядит так:

tmux="tmux -u -f $HOME/.tmux/config -S $HOME/.tmux/socket" if pgrep -u $UID -f '^tmux.*$' &>/dev/null; then for pane in `$tmux list-windows -t0 | sed -r 's/^([0-9]+):.*/\1/g'`; do $tmux send -t 0:$pane C-c  $tmux send -t 0:$pane export DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" ENTER $tmux send -t 0:$pane export DISPLAY="$DISPLAY" ENTER $tmux send -t 0:$pane C-c done else $tmux \ new -d su \; \ set remain-on-exit on \; \ neww su \; \ set remain-on-exit on \; \ select-window -t 0:1 fi 

Первый C-c- очистить строку от всего, что может остаться, перед запуском команд экспорта. Второе - очистить строку позже (tmux или bash скопируют команды в командную строку, я не знаю почему)

Нет, я был неправ. Это не помогает Или этого недостаточно. tijagi 9 лет назад 0
Конечно нет, я тоже забыл экспортировать `DISPLAY`! Теперь все отлично работает. tijagi 9 лет назад 0