解決するこの問題、tmuxを再起動せずにgnomeを再起動するたびに、すべてのシェルの環境変数を設定する必要がありますDBUS_SESSION_BUS_ADDRESS
(非常に一般的です)。tmux
この問題をどのように最適に解決できますか?
- 私はきれいにできません。他のプロセスの環境変更。
- できない各ウィンドウにコマンドを送信する
- 私からgnomeアプリケーションを実行できます。
PROMPT_COMMAND
これはを押す必要があることを意味します。Enterこれは醜くて過剰です。 - 環境変数は次のように設定できます。各コマンドの前にコマンドを実行してください。しかし、それは少し多いと思います。
この問題をよりきれいに解決する他の方法はありますか?
答え1
dbus-launch
この特別なケースでは、Gnomeを実行して任意のD-Busアドレスを生成するのではなく、dbus-daemon
Xセッションの最初に明示的に開始し、固定アドレス(たとえばunix:path=~/.dbus-$HOSTNAME-$DISPLAY
。
の情報を考えるとエラーレポート、あなたはそれを離れて、アプリケーションがルートunset DBUS_SESSION_BUS_ADDRESS
ウィンドウのプロパティからバスアドレスを見つけることができます。
一般的なケースでは、お客様の評価は正確です。ptrace
現在持っているのは、(ApparmorやSELinuxなどのセキュリティフレームワークが原因でプログラムがクラッシュしたり機能しなくなる可能性がある)、シェルコマンドの挿入(Windowsでのみフォーマットが有効)などの信頼できない方法です。シェルプロンプトで)。すべてのシェルプロンプト(zshpreexec
またはbashを使用)でコマンドを実行すると、少なくともPROMPT_COMMAND
問題が発生するリスクはありません。
別の解決策は、呼び出しをLD_PRELOAD
傍受するライブラリですgetenv
。過度な感じもします。
最良のオプションは、間接レベルを作成してアプリケーションにタスクを実行させることです。つまり、環境変数の値が有効なままになるようにソートし、アプリケーションにコンテキスト認識方式で解釈するようにします。アプリケーションにルートウィンドウのプロパティでD-Busアドレスを照会させることがこのアプローチの一例です。