ウィンドウマネージャでプログラムを起動する

ウィンドウマネージャでプログラムを起動する

ウィンドウ マネージャー (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 セッション内から起動されたアプリケーションは、DISPLAYX サーバーを指す環境変数を継承しますが、X セッション外 (SSH ログインなど) で開始されたプロセスにはその変数がありません。そのため、SSH ログインから X11 アプリケーションを起動するときには、明示的に設定する必要があります。

関連情報