Ubuntu上で動くちょっとしたアプリを作ったのですが、起動をLauncherから行わせたくなりました
インストールスクリプトを書いていた過程で見つけた、UnityのLaunhcerをコマンドラインから操作する方法を書いておきます。
デスクトップ設定ファイル *.desktop
[Desktop Entry]
Version=1.1
Name=HOGEシステムの起動
Comment=HogeSystem startup
Path=/example
Icon=/example/appicon48x48.png
Type=Application
Categories=Utility;Application;
TryExec=dash
Terminal=false
Exec=dash ./start.dash -l
同等のコマンドライン
$ cd /example ==> Path
$ test -x `which dash` ==> TryExec
$ dash ./start.dash -l ==> Exec
参考資料:
Ubuntu ディレクトリーエントリー・デスクトップエントリー その5 - デスクトップエントリーグループのエントリー(TryExec・Exec・Path・Terminal) - Ubuntu kledgeb
http://kledgeb.blogspot.jp/2013/05/ubuntu-5-tryexecexecpathterminal.html
リファレンス
http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.1.html
TIPS :*.desktop
から起動されたプロセスの環境変数等を確認する方法
先ほどのstart.desktopのうち、
Terminal=true
Exec=dash -i
以上のようにすると、dashがインタラクティブで起動しTerminalが表示された状態となりますので、これでexportなりを実行すれば状況がわかるようになります
Unity Launcher操作
Launcherはgsettings
コマンドを通じて操作できます
$ gsettings get com.canonical.Unity.Launcher favorites
['application://nautilus.desktop', 'application://firefox.desktop', 'application://unity-control-center.desktop','application://google-chrome-beta.desktop', 'application://thunderbird.desktop', 'application://skype.desktop','unity://running-apps', 'unity://expo-icon', 'unity://devices']
setはできますが、addやremoveという概念が無いため、get後に追加/削除して文字列を再構成したあと、setする操作が必要です。
これをやるRubyコードがこちら
module Launcher
extend self
def get
eval(`gsettings get com.canonical.Unity.Launcher favorites`.strip)
end
def set(list)
`gsettings set com.canonical.Unity.Launcher favorites '#{list.to_s}'`
end
def add(path)
set([path] + get)
end
def remove(path)
set(get - [path])
end
end
if __FILE__ == $0
def usage_and_exit
puts <<-EOT
Unity Launcher panel add/remove script
Usage: #{$0} <command>
get : Print the current setting.
add PATH : Add PATH to Launcher panel
remove PATH : Remove PATH from Launcher panel
EOT
exit 1
end
case (ARGV[0].downcase rescue nil)
when "get"
puts Launcher.get.to_s
when "add", "remove"
usage_and_exit if ARGV[1].nil?
Launcher.send(ARGV[0], ARGV[1])
else
usage_and_exit
end
end
$ ruby launcher-editor.rb get
["application://nautilus.desktop", "application://firefox.desktop", "application://unity-control-center.desktop", "application://google-chrome-beta.desktop", "application://thunderbird.desktop", "application://skype.desktop", "unity://running-apps", "unity://expo-icon", "unity://devices"]
$ ruby launcher-editor.rb add application:///tmp/start.desktop
$ ruby launcher-editor.rb remove application:///tmp/start.desktop
あとがき
役に立たない事ばかりやっている気がする