Chienomi

VPN(リバースフォワーディング)をアイコン操作にしてみる

先日の多段SSHによる外出時のログインだが、外出時にリバースフォワーディングをオンにし、帰ってきたらオフにするのはちょっと面倒だし、忘れそうだ。 そこで私は「システムトレイにアイコン出してもらって、クリックしたら閉じてくれるようにしたらいいじゃない」と考えた。

まず、「Linuxでシステムトレイにアイコン」と考えたらまずYadを考えて良い。 ZenityやKDialogはシステムトレイをサポートしていない。

yad --notification --image=<icon> --title=<title on hover>

の形式でシステムトレイにアイコンを表示できる。 --commandオプションをつかってクリック時の動作を指定することもできるし、--menuオプションで右クリックに対応させることもできる。 --commandオプションを指定した場合は終了するかわりにそのコマンドを実行する。

今回の場合クリックしたら終了を含む動作をさせたいので、特にコマンドは指定しない。 そこでyadプロセスが終了したらクリックした後の動作をさせていけばよいわけだ。

必ずしもこの操作をこのプログラムから行う、という制約はないこと、 そして「トンネルを解除しない」という選択がありえることから、ループとし、当該ユニットが動作中であればアイコンを表示する方式にした。

ひとつめのyadはシステムトレイにアイコンを表示し、クリックされるのを待つものだ。 これでクリックされるまではスクリプトはここでブロックされる。

ふたつ目のyadだが、yadの場合zenityと違い、タイプを指定しないで起動するとシンプルなダイアログになる。 アイコンとボタンのタイプはそれぞれ指定できる仕組みだ。 このため、ZenityやKDialogにあるいくつかの動作オプションがまとめられている。 ここではYes/Noダイアログを表示している。

なお、ボタンはボタンのあとに終了コードを書くようになっており、gtk-cancelも利用可能。それ以外は単にラベルとして使用される。

さらにランチャーで使用するため、.desktopファイルも作っておいた。 右クリックでの開始/停止もサポートしている。

これでわかりやすく、操作しやすくなった。

もちろん、SSHフォワーディングを行うスクリプトに含めるというのも手だが、そうすると他の手段が失われてしまう。 Systemdユニットにした上で追加機能は別のスクリプトにするというのは良いアイディアだと思う。

Wrote on: 2018-05-23T00:00:00+09:00