1

Я заметил, что я не могу запустить 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{1,2}

Я заметил, что 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

я тупой Мне просто нужно было переэкспортировать 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 скопируют команды в командную строку, я не знаю почему)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .