
ウィンドウ マネージャー (XFCE など) の「子」ではないプログラムをターミナルからウィンドウ マネージャーに起動する方法はありますか?
実行されたプログラムは、ターミナル セッションが閉じられた後も存続するように、ターミナル (およびサーバーへの現在の接続) から切り離される必要があります。
たとえば、ssh (x-forward などを使用せずに) 経由でサーバーに接続し、ブラウザーを起動して、接続を閉じるとします。サーバーの前に座って、最近開いたブラウザー (まだ実行中) を使用すると、ウィンドウ マネージャーが新しい「所有者」となり、ssh セッションから切り離されます。
答え1
プロセスをシェルから切り離す一般的な方法は次のとおりです。
を使用してバックグラウンドで実行し
&
、 を使用してシェルに追跡を停止するように要求しますdisown
。$ xterm & $ disown
(または
xterm & disown
)を使用してバックグラウンドで実行し
&
、nohup
ツールを使用して強制終了されないようにします。$ nohup xterm &
を使用してバックグラウンドで実行し
&
、シェルが追跡するのを防ぐためにダブルフォークを使用します。$ (xterm &)
以下を使用してバックグラウンドで実行
setsid
:$ setsid xterm
((setsid xterm &)
一部のオプションが機能しない場合は試してください。)
答え2
xterm -e "bash -c \"./script.sh; exec bash\"" &
ここで、./script.sh
単なるコマンドになることもあります。
答え3
SSH を使用して X サーバーを実行しているマシンにログインし、次を実行します。
DISPLAY=:0 xterm &
X ディスプレイに xterm が表示され、SSH セッションを閉じても開いたままになるはずです。
X11 アプリケーションは、DISPLAY
環境変数を使用して X サーバーを検索します。通常の値は で:0
、これは、X11 アプリケーションが Unix ドメイン ソケット を介してローカル X サーバーに接続する必要があることを意味します/tmp/X11-unix/X0
。
X セッション内から起動されたアプリケーションは、DISPLAY
X サーバーを指す環境変数を継承しますが、X セッション外 (SSH ログインなど) で開始されたプロセスにはその変数がありません。そのため、SSH ログインから X11 アプリケーションを起動するときには、明示的に設定する必要があります。