使用している端末を確認するにはどうすればよいですか?


23

私のマシンにはUbuntuがあり、その上で素晴らしいウィンドウマネージャーを実行しています。実行している端末を確認するにはどうすればよいですか?コマンドはありますか?


5
あなたは何を意味していましたか?クリックして、ヘルプ - > について、それというのですか?
-JoKeR

3
どの端末が端末プログラムまたはシェルを意味しますか?
-heemayl

回答:


24

TL; DR

  • 現在実行中のシェルの使用を見つける ls -l /proc/$$/exe
  • 現在実行中の端末を見つけるには、を使用しますxprop _NET_WM_PID WM_CLASSpid後の値をps -p <pid> -o argsコマンドに渡すことができます。
  • 技術的には、ターミナルエミュレータの場合、コメントに記載されているように、コマンドも必要ありません。

    どういう意味ですか?[ヘルプ]-> [バージョン情報]をクリックしますか?– JoKeR

シェルvsターミナル

最初に明確にする必要があるのは、正確に何が求められているかです-実行中のシェルまたは実行中のターミナルを見つける 多くの場合、これらの2つの用語は同じ意味で使用されますが、まったく異なるものです。シェルはコマンドラインインタープリターです。特に、対話型シェルは、コマンドを入力するプロンプトとテキストフィールドです。シェルは非対話型にすることもできます。たとえば、スクリプトは非対話型シェルをbash -c 'echo hello world'開始したり、非対話型シェルを開始したりします。

対照的に、ターミナルはシェルへのインターフェイスです(ただし、別のアプリケーションでもかまいません)。もともと端末は実際のハードウェアを指していましたが、現在はほとんどがソフトウェアです。GUIでCtrl+ Alt+ を押すtか、ターミナルアイコンをクリックすると、ターミナルエミュレーター、ハードウェアの動作を模倣するウィンドウが起動し、そのウィンドウ内でシェルが実行されていることがわかります。Ctrl+ Alt+ F2(または6つのファンクションキーのいずれか)は、仮想コンソール(別名)を開きますtty仮想端末が「仮想」である理由と、「実際の」端末は何/なぜ/どこにあるのかを読むことをお勧めします。詳細については。

シェル情報を取得する

各ユーザーには、/etc/passwdユーザー名に割り当てられたデフォルトのシェルがあります。デフォルトの設定を使用しており、コマンドとして別のシェルを明示的に呼び出していない場合、次を実行するだけで十分です。

echo $SHELL

しかし、もちろんこれはデフォルト値のみを示してます。以下を行うと仮定します。

user@ubuntu:~$ dash
$

私たちは、もとあったbashが、インタラクティブセッションを開始/bin/dashUbuntuのPOSIXやシステムのシェルを。変数$SHELLはその目的ではないため、変更されません。現在の値ではなくデフォルトが表示されます。私たちは別の視点からこれにアプローチする必要があります-プロセスの視点、これは私がカバーしたものですbashまたはshを使用していますか?

$ echo $$
4824
$ cat /proc/4824/comm                                                          
mksh
$ bash
xieerqi@eagle:~$ echo $$
6197
xieerqi@eagle:~$ cat /proc/6197/comm
bash

ここでは、/proc/ファイルシステムを利用します。プロセスの名前とコマンドラインパラメータがに表示され/proc/<pid>/commます。必要なのは、シェルのPIDを提供することだけです$$。上記の例では、それを個別に追加していますが、ただやることを止めるものは何もありません

cat /proc/$$/comm

テーマのバリエーションも可能です

ps -p $$ -o args

これにアプローチできる別の方法は、どこで確認すること/proc/<pid>/exeです。このファイルは、実行可能ファイルを指すシンボリックリンクです。したがって、私たちはできる

user@ubuntu:~$ ls -l /proc/$$/exe
lrwxrwxrwx 1 adminx adminx 0 Apr  4 18:20 /proc/1241/exe -> /bin/bash
user@ubuntu:~$ sh
$ ls -l /proc/$$/exe
lrwxrwxrwx 1 adminx adminx 0 Apr  4 18:20 /proc/1255/exe -> /bin/dash

2つのアプローチのいずれも、ケースの99%で機能します。もちろん、それらを破壊する方法があります。たとえば、シンボリックリンクは、実行可能ファイルは、シェルが起動した直後に削除された(その場合には、あなたは、おそらく遭遇するシステムの問題を除去するのであればどこも指しています/bin/sh/bin/dashでも、または/bin/bash推奨されていません-すべての後のスクリプトの多くは、それらに依存しています、特にシステムレベルのもの)。シェルのコマンド名は通常、execve()syscallの最初の引数として設定されます。これは、bashがどのように呼び出されているかを知る方法で説明されていますか?、したがって、を介してシェルを起動するアプリケーションがある場合、execve()任意の名前を付けることができます。しかし、これらは非標準的かつ非典型的なものであり、一貫性とセキュリティのために避けるべきです。


端末情報の取得

環境変数から始めることができます。多くの端末はxtermecho $TERMまたはによって報告される-compatible として自分自身をマスクしているようですecho $COLORTERM。しかし、環境変数はそれほど信頼できるツールではありません。これらは設定および設定解除できます。PIDでも同じことができますが、今回は親PIDを調べます。覚えているかもしれませんが、ターミナルはシェルへのインターフェイスであり、多くの場合、シェル自体を起動します。したがって、シェルの親プロセスであるプロセスを見つけることができます。

$ ps -p $$ -o args,ppid
COMMAND                      PPID
bash                         1234
$ ps -p 1234 -o args
COMMAND
/usr/lib/gnome-terminal/gnome-terminal-server

別の端末アプリで試してみましょうsakura

$ ps -p $$ -o args,ppid
COMMAND                      PPID
/bin/bash                   16950
$ ps -p 16950 -o args
COMMAND
sakura

そこから、このシェルを開始したものが既にあることがわかりgnome-terminalます。もちろん、この方法は、対話型シェルで作業している場合に機能します。たとえば、の親bash -c '...'またはを介して起動されたシェルを見つけようとしている場合ssh、PIDは非ターミナルアプリケーションからのものである可能性があり、GUIがまったくない可能性があります。

したがって、GUIターミナルを具体的に処理する場合は、実行xpropして目的のウィンドウをクリックし、そのpidをgrepし、pidに一致するプロセスの名前を確認します。または言い換えると:

$ ps aux | grep $(xprop | awk -F'='  '/PID/ {print $2}')                       
xieerqi   2124  0.6  1.7 208068 34604 ?        Sl   18:47   1:49 gnome-terminal

さらに、仕様に従って、ウィンドウマネージャーはWM_CLASSプロパティを設定する必要があります。したがって、以下からも取得できますxprop

$ xprop WM_CLASS 
WM_CLASS(STRING) = "sakura", "Sakura"

もちろん、これには1%の欠点もあります:WM_CLASSプロパティの設定は、それを行うウィンドウマネージャーに依存します。また、PIDはウィンドウの正確性を保証しません(このX11ウィンドウを作成したプロセスを参照してください)。そして、これらはメソッド自体の欠点ではなく、X11サーバーの欠点です。ただし、最も安定した有名なウィンドウマネージャー(openbox、Metacity、blackboxなど)およびほとんどのアプリケーションは正常に動作するため、Gnomeターミナルやターミネーターなどの問題は発生しません。

しかし、GUIターミナルエミュレータに関しては、コマンドを見つける必要さえありません。Aboutウィンドウ自体のダイアログを使用するだけです。そのルールの例外はxtermです。


O_O $SHELL、必ず
AB

ええ なぜあなたは人々が使用するのps | grepですか?ps -p $$!または、コマンドだけのためにps -p $$ -o cmd=
ムル

@muru私はあなたがあるよりも、経験の少ないユーザーだし、私はすべてのPSフラグが> _ <ぶっきらぼうに覚えがないため
Sergiy Kolodyazhnyy

2
私もそうではありませんが、ps | grepただ悪い形です。grepできるもののほとんどは、実際にpsそれ自体で、または他のツールで取得できます。
ムル

注:この質問はもともと不明瞭であり、一部には背景が必要なので、回答を更新しました。時間が経つにつれて、コマンドを呼び出すより良い方法があることもわかりました。
Sergiy Kolodyazhnyy

12

ショートバージョン(thx @Serg

cat /etc/alternatives/x-terminal-emulator

ロングバージョン

sudo update-alternatives --config x-terminal-emulator

*出力で探します

;)


出力例

There are 7 alternatives which provide `x-terminal-emulator’.
選択の選択肢
———————————————–
    1 / usr / bin / xterm
    2 / usr / bin / uxterm
    3 / usr / bin / koi8rxterm
    4 / usr / bin / lxterm
 * + 5 /usr/bin/gnome-terminal.wrapper
    6 / usr / bin / konsole
    7 /usr/bin/xfce4-terminal.wrapper
Press enter to keep the default[*], or type selection number:

または、@muruのおかげで、より詳細な出力があります

$ update-alternatives --display x-terminal-emulator
x-terminal-emulator - auto mode
  link currently points to /usr/bin/gnome-terminal.wrapper
/usr/bin/gnome-terminal.wrapper - priority 40
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/gnome-terminal.1.gz
/usr/bin/koi8rxterm - priority 20
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/koi8rxterm.1.gz
/usr/bin/lxterm - priority 30
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/lxterm.1.gz
/usr/bin/mate-terminal.wrapper - priority 30
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/mate-terminal.1.gz
/usr/bin/uxterm - priority 20
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/uxterm.1.gz
/usr/bin/xterm - priority 20
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/xterm.1.gz
Current 'best' version is '/usr/bin/gnome-terminal.wrapper'.

2
cat /etc/alternatives/x-terminal-emulator | grep exec
セルギーKolodyazhnyy

インストールする必要があるユーティリティはありますか?Binary file (standard input) matchesまたはupdate-alternatives: error: unknown argument -config'` を取得
Terrance

ネバーマインド、それは--config
テレンス

1
必要ありませんsudo。使用update-alternatives --display x-terminal-emulator
-muru

短いバージョンではfile /etc/alternatives/x-terminal-emulator、代わりに使用catするこのシンボリックリンクのターゲットを取得するために使用することを検討できます。このfileユーティリティはほとんどのシステムにインストールする必要があり、ターゲットの実行可能ファイルを見つけるために使用できます。catシンボリックリンクでは、このリンクのターゲットに応じて、任意のシェルスクリプトまたはバイナリファイル(gnome-terminalバイナリファイルurxvtなどのシェルスクリプト)を出力できます。
chris544

9

使用しているターミナルプログラムを知りたい場合は、これを使用します。

ps -o 'cmd=' -p $(ps -o 'ppid=' -p $$)

シェルインスタンスをフォークせずに、ターミナル(シェル)開いた直後にこれを実行します

端末プログラムを開くと、基本的に子プログラムであるシェルが生成されます。したがって、生成されたシェルの親は端末そのものです。つまり、シェルのPPIDは端末プログラムのPIDです。

ここで、シェル(bash)の親プロセスID(PPID)を見つけてps -o 'ppid=' -p $$います。これは端末プログラムのプロセスIDです。

次に、PIDからプロセス名を見つけています。

$ ps -o 'cmd=' -p $(ps -o 'ppid=' -p $$)
gnome-terminal

基本的には次の1つのライナーです。

$ ps -o 'ppid=' -p $$
 2268

$ ps -o 'cmd=' -p 2268
gnome-terminal

1
このコマンドを実行すると、が得られsshd: username@pts/4ます。注:PuTTYを使用してマシンに接続しています。でsshd、実際に端末エミュレータ?
user3731622

3

printenvターミナルウィンドウから入力して、開いているセッションのすべての変数を表示します。

echo $COLORTERMターミナルウィンドウから入力します。 注:これはすべてのターミナルでsakura機能するわけではありません。

root@terrance-Linux:~# echo $COLORTERM
gnome-terminal

以下はaterm端末からのものです。

root@terrance-Linux:~$ echo $COLORTERM
rxvt-xpm

sakuraのecho $ COLORTERMは空白を報告します
Sergiy Kolodyazhnyy

@Sergありがとう。この場合、xtermのバリアントのように見えます。
テランス

@Sergは、さくらが好きかどうか疑問に思っていますか?そして、何に惹かれますか?
テランス

それは大丈夫です、特別なことはなく、非常に単純です。ターミネーター、roxterm、チルダ、ドロップダウンターミナルターミナルエミュレーター(Rで始まるものを忘れてしまった)のさまざまなターミナルエミュレーターを試しました。私はそれはのxtermやgnome-terminalの間の妥協であると思います
Sergiy Kolodyazhnyy

@Serg Ah、それは知っておくと良いことです。私はそれを確認するつもりです。:-)私は常に、xdotoolキーを送信するキープアライブスクリプトで動作する優れた端末を探しています。
テランス

3

端末プログラムの名前だけが必要な場合は、ほとんどの場合、[ヘルプ]> [バージョン情報]にあります。


0
cat /etc/alternatives/x-terminal-emulator | grep exec

サンプル出力:

exec( 'gnome-terminal'、@ args);

私のシステムには答えがあります:gnome-terminal

そのgnome-terminalため、端末に入力すると、別の同一の端末ウィンドウが開きます。

ソース:


-1

簡単な答え。コンソールまたはsshの両方で機能します。

単純な文字端末の例:

ssh username@systemname
echo $TERM
dumb

その接続ではGUIアプリを開けないことを伝えます

xtermの例(WindowsのPuTTY / Xmingでも動作します)

ssh -Y username@systemname      -- omit this if using PuTTY --
echo $TERM
xterm

リーフパッドエディターやnautilusファイルマネージャーを開くなどのGUIコマンドを使用できることを意味します。

コンソールでは同じです:

Open terminal window
echo $TERM
xterm

TERMデフォルトの端末エミュレータを定義する変数ではなく、現在の端末エミュレータの機能を定義する変数です。たとえば、変数を「xterm-color」に設定すると、端末で実行されているすべてのプログラムに、現在の端末が色を理解することになっていることがわかります。これを「linux」に設定すると、これがVTであることがプログラムに伝えられます。など
サイボリック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.