web-dev-qa-db-ja.com

ターミナルからGUIアプリをきれいに起動する方法は?

一部のGUIアプリは、ターミナルコマンドラインから正常に起動しますが、起動しないものもあり、アプリが終了するのをターミナルに待機させます。それでも、コマンドラインを「リリース」しない人もいます。

謎のアンパサンド&接尾辞は、端末がプロセスをバックグラウンドにする原因になっているようです(しかし、そこで何が起こるかわかりません)。

ターミナルからアプリを起動する方法はありますか? Alt+F2

バックグラウンドで何かがまだ端末に出力されていない状態で、すぐにコマンドラインを再び利用できるようにしたいと思います。

78
Peter.O

Geditの場合、私は常にコピーを開いたままにします。既存のコピーを実行している限り、ターミナルからgedit呼び出しを起動してからターミナルを閉じても、geditは終了しません。

他のことについては、他の人が言ったことも機能します。私はNohupのファンです。しかし、端末を必要とする場合は、デタッチしてから再接続できます。screenをご覧ください。

  1. ターミナルで実行してから、出力をプッシュし続ける何かを実行します。私はDjango開発サーバーを使用していますが、irssiまたはwatch uptimeが良い例です。
  2. ターミナルを強制終了して、新しいターミナルを起動します。
  3. screen -rとBOOMを実行すると、元に戻ります。

screenはそれよりもはるかに大きいため、byobuと組み合わせて端末の操作性を向上させることができます。読んでください。

17
Oli

geditを切り離した状態で実行するプログラム(たとえば、「disowned」、「disentangled」、「decoupled」)であるとします。正確に何をしたいかによって、さまざまな方法があります。

すでに実行中のプログラム

否認:

disown -hは、既に実行中のプログラムでそれを行いたい場合(つまり、Nohup itを忘れた場合)に行く方法です。最初に使用して停止する必要があります Ctrl+Z。その後、bg [jobId](たとえば、bg 1)を使用してバックグラウンドに配置できます。 jobsを使用して、実行中のジョブとそのjobIdのリストを取得します。その後、disown -h %[jobId]を使用して端末から分離できます。ターミナルセッションの例:

$ gedit 
^Z
[1]+  Stopped                 gedit
$ jobs
[1]+  Stopped                 gedit
$ bg 1
[1]+ gedit &
$ disown -h %1
$ exit

プログラムはまだ開始されていません

いや

Nohupはすべてのマシンに常に存在するとは限りません。事前に分離したいことがわかっている場合は、次を使用します。

Nohup gedit &

たぶん、シェル出力とプログラムを疑似入力ソースにリダイレクトしたいかもしれません:Nohup ./myprogram > foo.out 2> bar.err < /dev/null &。出力に迷惑をかけないように、または後で使用するために出力をリダイレクトする必要があります。ヌル入力は、sshなどでの接続解除を防ぐのに役立ちます。

サブシェル:

同様の効果を達成することができます

$ (geany >/dev/null 2>&1 &)

括弧は、geditを実行するための新しいサブシェルを開きます。>/dev/null 2>&1は、シェルの出力をどこにもリダイレクトしません(出力を抑制します)。そして、最後の&は、プロセスをバックグラウンドに置きます。

端末多重化

screen または byob を使用した端末多重化。基本的には、独自のターミナルでプログラムを実行します。他の理由でも、for延を本当にお勧めできます。以下は、最初のステップに役立つ可能性のあるボーイブショートカットのリストです。

有用:

  • F2 新しいウィンドウを作成する
  • F3 次のウィンドウに移動する
  • F4 前のウィンドウに移動する
  • F6 セッションから切り離してログアウトする
  • Shift-F6 セッションから切断しますが、ログアウトしません
  • F7 スクロールバック/検索モードに入る
  • Ctrl-F5 SSH/GPGソケットまたはエージェントを再接続します

あまり役に立たない:

  • Shift-F2 画面を水平に分割します
  • Ctrl-F2 画面を垂直に分割します
  • Shift-F3 次の分割にフォーカスを移動
  • Shift-F4 前の分割にフォーカスを移動
  • Shift-F5 すべての分割を折りたたむ
  • F5 すべてのステータス通知を更新する
  • F8 現在のウィンドウの名前を変更する
  • F9 By風構成メニューを起動する
  • F12 GNUスクリーンのエスケープキー
  • Alt-Pageup このウィンドウの履歴をスクロールバックします
  • Alt-Pagedown このウィンドウの履歴を前方にスクロールします
  • Ctrl-a-! By風のキーバインドをすべてオンまたはオフに切り替えます

「at」デーモンなど

atは、スケジュールされた時間にコマンドを実行するための便利な便利なツールです。シェルからコマンドを切り離すと「誤用」される可能性があります。

echo './myprogram myoption1 myoption2' | at now

setsidstart-stop-daemonを調べることもできますが、他の方法で十分です。

84
con-f-use

謎のアンパサンド「&」サフィックスは、端末がプロセスをバックグラウンドに移行させるように思われます...(しかし、そこで何が起こるかわかりません)。

それは、多くの場合あなたが望むものです。 &の使用を忘れた場合は、ctrl-zを使用してプログラムを中断し、bgコマンドを使用してバックグラウンドに配置し、そのシェルを引き続き使用できます。

プロセスのstdin、stdout、およびstderrは、まだ端末に接続されています。必要に応じて、/ dev/nullまたは他のファイルにリダイレクトできます(たとえば、出力ログをどこかに保存します)。

some-program </dev/null &>/dev/null &
# &>file is bash for 1>file 2>&1

ジョブでプロセスを確認し、フォアグラウンドに戻し(fgコマンド)、シグナルを送信(killコマンド)できます。

一部のグラフィカルプログラムは端末から切り離されます。その場合、「通常」コマンドを実行すると、グラフィカルプログラムand「exits」が起動することがわかります。


ここに 短いスクリプト があります。これは 〜/ bin に配置できます。これはrunbgと名付けました:

#!/bin/bash
[ $# -eq 0 ] && {  # $# is number of args
  echo "$(basename $0): missing command" >&2
  exit 1
}
prog="$(which "$1")"  # see below
[ -z "$prog" ] && {
  echo "$(basename $0): unknown command: $1" >&2
  exit 1
}
shift  # remove $1, now $prog, from args
tty -s && exec </dev/null      # if stdin is a terminal, redirect from null
tty -s <&1 && exec >/dev/null  # if stdout is a terminal, redirect to null
tty -s <&2 && exec 2>&1        # stderr to stdout (which might not be null)
"$prog" "$@" &  # $@ is all args

リダイレクトする前にプログラム($ prog)を検索して、位置を特定する際のエラーを報告できるようにします。 「runbg your-command args ...」として実行します。出力をどこかに保存する必要がある場合でも、stdout/errをファイルにリダイレクトできます。

リダイレクトとエラー処理を除き、これは htorque's answer と同等です。

25
Roger Pate

アプリケーションを起動し、起動したターミナルからデタッチするには、&!を使用します。

firefox &!
22
Rick

Nohupを使用します

Nohupは、ハングアップ信号を無視して特定のコマンドを実行するプログラムです。そのため、親プロセスの終了後もコマンドはバックグラウンドで実行し続けることができます。 manpage を参照してください

例えば:

Nohup gedit something
20
Florian Diesch

ターミナルを開き、screenと入力し、実行するコマンドを入力して、ターミナルを閉じます。プログラムはGNU Screenセッションで実行し続ける必要があります。

4
RobinJ

これは私のために働いた:

$ (Nohup gedit 2>/dev/null &)
1
wesleycoder

xdg-open

この汎用ユーティリティをご覧ください: https://linux.die.net/man/1/xdg-open

これにより、ファイルマネージャーで相対位置が開きます。

 $ xdg-open .

これにより、pdfリーダーでpdfファイルが開きます。

 $ xdg-open foo.pdf

Web URLを提供することもできます

$ xdg-open www.google.com
1
Jonathan Komar

多くの人が考えているように、Nohupは考慮すべきものです。しかし、Nohupは端末上で開いたままであり、刺激的な端末上でプログラムアクティビティを表示します。それを避けるために、その後は端末を閉じるだけです。私が使用する非常に簡単な回避策を見つけました。

Nohup gedit & exit

以上です。 geditを起動し、geditの起動時にターミナルを閉じます。 geditは現在ターミナルに関連付けられていないため、アクティブのままです。

0
Lokesh Devnani

これはスクリプト内でも機能します(エイリアスと同様に、 '&'トレーラーは通常、対話型ではないためスクリプトでは許可されません)。

bash -i >/dev/null 2>&1 <<<'Nohup gedit &'
0
Sam

これは私のために働いた:

$ (some-program &) &>/dev/null

# Examples:
$ (gedit &) &>/dev/null
$ (google-chrome &) &>/dev/null
0
Eyal Levin