12.04 PrecisePangolin から 14.04 TrustyTahr にアップグレードした後、疑問が浮かびました。この疑問は、「who」コマンドとその出力に関するものです。Ubuntu の以前のエディションでは、who コマンドの出力には、ログインしてシステムと lightdm を初期化するために使用された tty が示されていました。たとえば、次のようになります。
:~$ who
geo tty7 thedate (:0)
geo pts/n thedate (:0.0)
しかし、14.04 TrustyTahr で who コマンドを実行すると、出力は次のようになります。
:~$ who
geo :0 thedate (:0)
geo pts/n thedate (:0.0)
どちらのエディションでも、vt7 のハンドオフは /boot で行われ、TrustyTahr では lightdm 経由でログインすると XDG_VTNR 変数は 7 になりますが、tty7 も vt7 も utmp ファイルに出力されません。これは何ヶ月も私を悩ませましたが、最終的に、who コマンドの補足として popen 関数を組み込んだ c++ プログラムを作成し、who コマンドが tty 係数で現在の XDG_VTNR を表示できるようにしました。例:
geo tty7 2015-06-04 20:54 (:0)
geo pts/0 2015-06-04 20:54 (:0.0)
それにもかかわらず、なぜこれが変更されたのでしょうか? また、このような状況になっているのは私のものだけでしょうか。これは昨年の 5 月頃にダウンロードしたもので、不良 ISO か何かを入手した可能性があります。who コマンドを実行するたびに、Beastie Boys の曲「Sabotage」(冗談です、悪い曲ではありません) を思い出します。
答え1
コマンドを含むパッケージをアップグレードしてみてくださいwho
。インストールに ISO の奇妙なバージョンを使用した場合でも、更新によって置き換えられるはずです。
パッケージが所有するものを確認しますwho
:
which who # find out where 'who' binary is
dpkg -S /path/to/who
それから:
apt-get update
apt-get install <package name from dpkg -S command>
それでも動作しない場合は、環境のない別のシェルを試してください(不安定な環境変数、設定、bash 固有のジャンクなどを取り除くため)。
env -i /bin/dash
$ who
ベアシェルで動作する場合、問題はおそらく bashrc 内の奇妙なエイリアス定義、または同様のものである可能性があります。
また、who --all
機能しますか?