Як оновити DBUS_SESSION_BUS_ADDRESS в tmux, коли ця адреса змінюється?


1

Я зауважив, що не можу запустити пару в тихій панелі: це дало мені помилку

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

/ мені німий. Мені потрібно лише повторно експортувати 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

Звичайно ні, забув експортувати DISPLAYтеж! Тепер він відмінно працює.
tijagi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.