ターミナルを開いてw
コマンドを実行すると、次のように表示されます。
user tty7 :0 12:04 39:56 36.87s 0.06s /sbin/upstart -
ここで、terminator
またはxterm
を開いてw
コマンドを実行すると、次のようにw
コマンドの出力にそのエントリが表示されます。
user tty7 :0 12:04 39:56 36.87s 0.06s
/sbin/upstart -
user pts/2 :0.0 12:50 1.00s 0.02s 0.00s w
しかし、gnome-terminal
またはxfce4-terminal
を開くと、新しいエントリは表示されません。 xfce4-terminalではなくターミネーターの新しいセッションが表示されるのはなぜですか?
w
は、utmp
に保存されている情報を表示します(/var/run/utmp
通常はLinuxシステム)。これは通常、「ログイン」セッションielogin
(仮想コンソールまたはシリアル接続でのログイン用)、ディスプレイマネージャーによってのみ更新されます。 (グラフィカルセッション用)、SSHサーバー(SSH接続用)、およびいくつかの(ほとんど?)ターミナルエミュレーター。後者の場合、utmp
を更新するかどうかは、組み込みのサポートと構成によって異なります。たとえば、xterm
にはこのためのut
フラグがあります(-ut
はutmp
更新を無効にし、+ut
はそれらを有効にします)、そしてGNOMEターミナル もはやutmp
を直接更新しません 。
つまり、あなたのケースではutmp
に追加されたエントリが表示されています:ディスプレイマネージャによって追加されたエントリ(tty7
)、および使用しているターミナルエミュレータの一部によって追加されたもの。
コマンドをラップして、たとえばutmp
を使用して、libutempter
ロギングを好きなものに追加することは可能ですが、それは明らかに 思ったほど簡単ではありません 。
w
はターミナルセッションを表示しません。 w
プログラムが報告するloginデータベースは、terminalデータベースではありません。 (正式には、ユーザーアカウンティングデータベースですが、SingleUnixSpecificationはこの点で不完全です。)
ターミナルデータベースの場合、NeoVIM、emacs、tmux
、screen
、ptybandage
、ptyrun
、さらにはscript
など、プログラムが使用するすべてのpseudoターミナルを記録します。しかし、そうではなく、そうではありません。
(BBS、FidoNet、およびUUCP端末セッションの「呼び出し」端末の使用法などを記録しないことについて、歴史について少し知識が必要な同様の議論をすることができます。)
loginデータベースとして、テキストとグラフィックの両方でloginセッションを記録します。 libvteの人々は、このデータベースへの書き込みは、端末の範囲内ではなく、グラフィカルおよびテキストのloginサブシステムの範囲内であると主張していますemulator実行中- 内ログインセッション。これは、トラステッドコンピューティングベースを使用しないプログラムがログインデータベースを書き込み/更新できるようにすることで、ログインアカウンティングのセキュリティが無意味になるという事実によって裏付けられた公正な点です。
そのため、すべてのターミナルエミュレータセッションがログインデータベースにログインセッションとして表示されることを期待するべきではありません。実際、anyターミナルエミュレータセッションです。ログインシェルを呼び出しているターミナルエミュレーターでさえシステムへの実際のログオンは行っていません、完全にログイン済みのセッション内で動作しています。ターミナルエミュレータの作成者は、ログインデータベースにターミナルエミュレータセッションを記録させようとしましたが、その努力により、長い間認識されてきた多くの問題が発生しました。
逆に、should[〜#〜] gui [〜#〜]ログインセッションの単一のレコードが表示されることを期待します。 (ただし、さらに読む記事で説明されているように、実際にはこれはかなり混乱しています。)
pututxline
。 基本仕様。 IEEE 1003.1:2017。オープングループ。