web-dev-qa-db-ja.com

そのアドレスが変更されたときにtmuxのDBUS_SESSION_BUS_ADDRESSを更新するにはどうすればよいですか?

TmuxペインでSteamを実行できないことに気づきました:エラーが発生しました

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セッションの環境は、〜/ .xinitrcのWM開始コマンドで実行されるdbus-launchの影響を受けないためです。

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

では、アドレスが変更されたときにその変数を更新するにはどうすればよいですか?..

2
tijagi

/ meダム。自動起動スクリプトのtmuxウィンドウでDBUS_SESSION_BUS_ADDRESSを再エクスポートする必要があったのは、それがすでに実行されているかどうか、または起動する必要があるかどうかを確認するときです。

したがって、autorun.shのtmuxに関連するセクションは次のようになります。

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は、エクスポートコマンドを実行する前にそこに残っている可能性のあるものから行をクリアすることです。 2つ目は、後で行をクリアすることです(tmuxまたはbashはコマンドをコマンドラインにコピーします。理由はわかりません)

2
tijagi