Thursday, June 7, 2018 / MacOS, Ubuntu, X11

Ubuntu Server に ssh でログインしたら DISPLAY 変数を自動セットする話

諸事情により Ubuntu Server 18.04 上の Android Studio を Macbook 側にX11(XQuartz) を使って表示させて使っているのだが、そのとき Ubuntu Server 上で毎回 DISPLAY 変数を設定するのが面倒だったので、自動でセットするようにした話。

たぶん、もっと楽な方法があるのではないかと思うのだが、 とりあえず Macbook から ssh で Ubuntu Server にログインして、 export DISPLAY=192.168.0.100:0.0 とかいった値を毎回セットするのが面倒なので、自動でセットする方法を探した。

Macbook から Ubuntu Server にログインして lastlog コマンドを実行すると以下のような情報が標準出力される。

sshd                                       **Never logged in**
foo               pts/1    192.168.0.100   Thu Jun  7 10:22:43 +0000 2018
mongodb                                    **Never logged in**

さらに lastlog -u foo とすれば関心のある行だけ出力してくれる。

Username         Port     From             Latest
foo             pts/1    192.168.0.100   Thu Jun  7 10:22:43 +0000 2018

ということはあとは IP アドレスだけを取り出したいので以下のようなコマンドをパイプしてフィルタリングすればOK。

lastlog -u `whoami` | grep `whoami` | sed -e 's/.*\(192.168.[^ ]*\).*/\1/'

これを mylastlog コマンドとして $HOME/bin/mylastlog などパスが通った場所に配置して chmod u+x する。 あとは、login したときに環境変数 DISPLAY に mylastlog コマンドの実行結果をセットすればよい。
つまり $HOME/.bashrc の最後に以下を追記。

export DISPLAY=`mylastlog`:0.0

これで一つ手間が減った。