最近はちまちまとコードを書くことが多いので、基本的にUbuntu環境を使っているのですが、時としてWindowsのようにデスクトップに置いたショートカットから引数を与えてプログラムを起動したくなることもあります。
「コマンドに引数を入力するのが面倒ならエイリアスを定義すればいいじゃない」という指摘は御もっともなのですが、端末エミュレータを引数付きで起動したいときはそれでは困るというわけで…
僕は端末エミュレータとしてTerminatorを好んで使っているのですが、こいつ、画面を水平、垂直に区切って、レイアウトを作ることができて、そのレイアウトを保存し、更に起動コマンドに保存したレイアウトの名前を引数として与えると最初からそのレイアウトのまま起動してくれるという便利な奴なんです。
でも…「コマンドに引数を与えるって事は、一度は別の端末を立ち上げないといけないよね…?」
そう、自分の望むレイアウトの端末を起動するには、それを起動するための端末が必要になるんです。手間を考えると機能の便利さも半減ってもんです。
そこで端末以外からプログラムを起動する手段としてGUIのショートカットを使おうという魂胆であります。
Ubuntuの使いやすさと使いにくさの象徴的存在とも言えるUnity-Desktop
このランチャーにあるショートカットには任意のコマンドを登録できます。
ショートカットの情報は
/usr/share/applicaitons/アプリ名.desktop
というファイルに記載されていて、中身はこんな感じ
[Desktop Entry] Name=Terminator Comment=Multiple terminals in one window TryExec=terminator Exec=terminator Icon=terminator Type=Application Categories=GNOME;GTK;Utility;TerminalEmulator;System; StartupNotify=true X-Ubuntu-Gettext-Domain=terminator X-Ayatana-Desktop-Shortcuts=NewWindow; Keywords=terminal;shell;prompt;command;commandline; [NewWindow Shortcut Group] Name=Open a new window Exec=terminator TargetEnvironment=Unity
このファイルの”X-Ayatana-Deskotp-Shortcuts”の行が右クリックメニューの宣言。
下部の[宣言名 Shortcut Group]以下の部分がその定義です。ここで”Exec”の行にコマンドを書くと、
その右クリックメニューをクリックした時に実行されるコマンドを決める事ができます。
“New window with layout”というメニューを追加したいときはこんな感じ
[Desktop Entry] Name=Terminator Comment=Multiple terminals in one window TryExec=terminator Exec=terminator Icon=terminator Type=Application Categories=GNOME;GTK;Utility;TerminalEmulator;System; StartupNotify=true X-Ubuntu-Gettext-Domain=terminator X-Ayatana-Desktop-Shortcuts=NewWindow;WithLayout Keywords=terminal;shell;prompt;command;commandline; [NewWindow Shortcut Group] Name=Open a new window Exec=terminator TargetEnvironment=Unity [WithLayout Shortcut Group] Name=New window with layout Exec=terminator -l codeedit --working-directory=~/pgm OnlyShowIn=Unity;
ここで、X-Ayatana…で宣言した名前が右クリックメニューに表示されるのではなく、下の定義部で”Name”に指定した文字列が表示されます。宣言名は飽くまでも識別子っていう事みたいですね。
[2014/08/30 追記]
ただしまだ問題があります、この方法だと何故か sudo が出来ません。理由はまだ調べていませんが取り急ぎsudoする方法を考えました。
Exac=…に端末エミュレータにコマンドを実行するよう引数を与えて起動するコマンドを書きます。
Exec=gnome-terminal -x bash -c "sudo <コマンド>"
これだと実行時に端末エミュレータのウィンドウが開いてしまいますが、他の方法を思いつきませんでした(´・ω・`)
Launcherからroot権限で起動したいアプリケーションなんてそんなに数もないしまぁいいかな^^;
また、X-Ayatana…ではなく、代わりに Actions=…と書くことも出来るようです。公式ではこちらが案内されているのですが、Terminatorの.desktopファイルになぜX-Ayatana…と書いてあるのかは分かりませぬ…
Action=…と書いた場合には[<宣言名> Shortcut Group]の行は[Desktop Action <宣言名>]と書き換え、以下のようになります。
Actions=asroot [Desktop Action asroot] Name=run as root Exec=gnome-terminal -x bash -c "sudo <コマンド>" OnlyShowIn=Unity;
詳細な情報は以下のページにあります。