11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UnityのLauncherにコマンドラインで*.desktopファイルを登録する方法

Last updated at Posted at 2014-10-03

Ubuntu上で動くちょっとしたアプリを作ったのですが、起動をLauncherから行わせたくなりました

インストールスクリプトを書いていた過程で見つけた、UnityのLaunhcerをコマンドラインから操作する方法を書いておきます。

デスクトップ設定ファイル *.desktop

/tmp/start.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のうち、

/tmp/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コードがこちら

launcher-editor.rb
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

あとがき

役に立たない事ばかりやっている気がする

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?