Ubuntuで自分で作ったアプリのショートカットをメニューやドック登録するにはそもそもメニューの作りを理解する必要があるのでまとめ。
メニューの概要
呼称について
UbuntuはGnomeというデスクトップを採用しているのだが、このGnomeはしょっちゅう仕様が変わったり呼称が変わったりしてややこしい。
このブログでは冒頭の画面の左に表示されているアプリの一覧をDock、中央のアプリの一覧画面をメニュー、アプリのアイコン画像のことをアイコン、アプリの設定をショートカットと呼ぶことにする
メニューの構成
「アプリ名.desktop」というファイルを作成するとショートカットが作られる。使用するアイコンはショートカット中で指定する。そのファイルを然るべきディレクトリ(後述)に配置すればメニューに表示される。
ショートカットはdconf(後述)でグループ化したりDockに登録したりできる。なお、ショートカットをDockに配置するとメニューから消え、Dockから外すとメニューに表示される。
メニューの操作
メニューの操作はGUIで行うのが一般的。アイコンを他のアイコンに重ねるとグループ化される。アプリの起動中にDockで右クリックして「ダッシュボードにピン留め」を選択するとDockに登録される。
グループ化やDockへの登録を設定ファイルで行うにはdconfというバイナリの設定ファイルを変更する必要がある。dconfやgsettingsといったコマンドの他、dconf-editorを使えばある程度GUIで設定できる。
ショートカット
ショートカットを作る前に配置場所を決める
ショートカットを作り始める前に保管先を決めておこう。Gnomeは以下の順位でショートカット(アプリ名.desktop)を検索する。
~/.local/share/applications | aptやdpkg、Ubuntuソフトウェアでインストールしたアプリ(インストールしたユーザーのみ使う場合) |
/usr/local/share/applications | aptやdpkg、Ubuntuソフトウェアでインストールしたアプリ(共通-ユーザーレベル) |
/usr/share/applications | aptやdpkg、Ubuntuソフトウェアでインストールしたアプリ(共通) |
/var/lib/snapd/desktop/applications | snapでインストールしたアプリ |
また、アイコンの画像ファイルはフルパスで指定するが、ファイル名だけ指定された場合は以下のディレクトリを検索する。
HOME/.icons | 下位互換性のため |
$XDG_DATA_DIRS/icons | 環境変数が設定されている場合のみ有効 |
/usr/share/pixmaps | 通常はここを検索する |
/snap/gtk-common-themes/xxxx/share/icons | snapを使用している場合はここも検索する |
ショートカットを作る
ファイル名
ショートカットは前述の通り「アプリ名.desktop」というファイル名で作成する。アプリ名は自由だが、前述の複数のディレクトリに同じファイル名があった場合は前述の上位のディレクトリが優先される。
アプリ名.desktopファイルの書き方
アプリ名.desktopファイルには表示されるアプリの名前や画像、起動するプログラムのパス、右クリックした際の動作を記載する。
詳細な記述内容はfreedesktop.orgに記載があるが、基本的には以下の構成となっている。
[Desktop Entry]
ここに基本的な設定と通常の起動方法を記載。必須。
[Desktop Action new-window]
ここに右クリックから新しいウインドウで開くときの動作を記載
[Desktop Action new-private-window]
ここに右クリックから新しいプライベートウインドウで開くときの動作を記載
ここでは/usr/locall/bin/hogeというブラウザに「ほげほげ」という名前を付け、/var/local/icons/hoge.pngを画像として使用するケースを記載する。
[Desktop Entry]には主に以下を記載する (☆は必須項目)
すべてのキーはfreedesktopの 6 Recognaized desktop entry keysを参照
Version=1.0 | このショートカットの設定が準拠するバージョン。ディストリビューションやバージョンによって変わるが基本的に1.0にしておけば互換性を確保できる |
☆Type=Application | このプログラムのタイプ Application : アプリケーション Link : リンク Directory : ディレクトリ |
☆Name=hoge hoge Name[ja]=ほげほげ | ショートカットにつけるアプリの名前。アイコンとともにメニューに表示される。[ja]は日本語を表示できる環境で表示するアプリ名 |
GenericName=Web Browser GenericName[ja]=ウェブ・ブラウザ | アプリの一般的な名前。メニューやDockでは使わないがランチャーなどのアプリが使う。 |
Comment=Browse the World Wide Web Comment[ja]=ウェブを閲覧します | アプリの簡単な紹介。メニューやDockでは使わないがランチャーなどのアプリが使う。 NameやGenericNameと重複してはいけない |
Categories=GNOME;WebBrowser; | メニューに表示される際のカテゴリ。指定できる範囲はDesktop Menu Specificationを参照 |
Icon=/var/local/icons/hoge.png | アイコンを指定する。拡張子は小文字にすること。 フルパスで指定しなかった場合はIcon Themesの仕様に従って検索する。 Version0.11の仕様ではPNG,XPM,SVGを使用できる。 |
NoDisplay=false | ショートカットをメニューに表示させないか否か。 true: 表示させない false:表示させる このアプリをファイルのMIMEに紐づけておけばあえてショートカットを表示させなくてもよい場合など、意識して起動しなくてよい場合はtrueにする。 |
Exec=/usr/locall/bin/hoge %u | 実行するプログラム。引数をもたせることもできる。詳細な書き方は7 The Exec Keyを参照 |
Path=/home/username/hogework | タイプがApplicationの場合の作業ディレクトリ |
Terminal=false | プログラムがターミナルウインドウで実行されるか |
MimeType=text/html;text/xml | アプリケーションがサポートしているMIMEタイプ |
Keywords=Internet;WWW;Browser; Keywords[ja]=Internet;WWW;ブラウザ | このエントリを説明するために他のメタデータに加えて使用できる文字列のリスト。エントリの検索などで使う。 Name、GenericNameと重複してはいけない |
Actions=new-window;new-private-window; | 右クリックで起動するなどの通常とは異なる動作を指定する。 詳細はこのあと[Desktop Action new-window]や[Desktop Action new-private-window]で記載する。 指定できる値の詳細は11 Additional application actionsを参照 |
URL=http://xxxx/xxx/xxx | この例では使わないが、Typeがlinkの場合に開くURLを指定する |
[Desktop Action new-window]には以下を記載する。[Desktop Action new-private-window]も同様。
Name=Open a New Window Name[ja]=新しいウィンドウを開く | 右クリックして表示される「新しいウインドウで開く」の文字列 |
Exec=/usr/locall/bin/hoge %u -newwindow | 実行コマンド |
グループ化とDockへの登録
詳細はGnomeのマニュアルを参照
設定の方法
ショートカットのグループ化やDockへの登録は以下のバイナリファイルで設定する。
- ~/.config/dconf/user
- /etc/dconf/profile/ファイル名
このファイルはデータベース形式となっており、viなどのエディタでは編集できない。
データベースはオブジェクト形式になっており、目的の設定をdconfやgsettingsといったコマンドで設定する。dconf-editorを使えばGUIでも設定できる。
例えばDockに登録されているアプリは/org/gnome/shellの下にあるfavorite-appsというKEYに設定されているので、この値を変更すればDockに登録したり削除したりできる。
Dockに登録されているアプリが/org/gnome/shell/favorite-appsにあることはGnomeのマニュアルに記載があるはずだが見つけることができなかった。私はdconfの設定をダンプしていてたまたま見つけた。
dconf dump /org/gnome/shell/ を実行することで/org/gnome/shell下のすべての設定を表示できるので、この中から目的の設定を探すことができるかもしれない。
コマンドでの設定は間違いが多くなるため、メニュー画面上でドラッグ&ドロップして設定することをおすすめする。
dconfコマンドを使用する場合
dconfは以下のオプションを使用する。
dconf read [ -d ] <key> | 設定を読み込む。 -d をつけるとデフォルト値が読み込まれる。 |
dconf write <key> <value> | 値を設定する |
dconf list <dir> | 指定したディレクトリとそのサブディレクトリにあるキーの一覧を表示する |
dconf dump <dir> | 指定したディレクトリとそのサブディレクトリにあるキーと値を表示する |
なお、dconfコマンドにおけるディレクトリはLinuxのファイルシステム上のディレクトリではなく、データベース内のツリー構造の位置を示す点に注意が必要。
以下はDockに登録されているアプリの一覧を確認した例。
$ dconf read /org/gnome/shell/favorite-apps
['org.gnome.Software.desktop', 'org.gnome.clocks.desktop', 'thunar.desktop', 'org.gnome.Terminal.desktop', 'org.gnome.eog.desktop', 'simple-scan.desktop', 'google-chrome.desktop', 'thunderbird.desktop', 'alacarte-made-2.desktop', 'gimp.desktop', 'org.inkscape.Inkscape.desktop', 'org.gnome.gedit.desktop', 'virt-manager.desktop', 'code.desktop', 'org.gnome.Settings.desktop', 'org.gnome.Rhythmbox3.desktop']
上記の様にDockに登録するアプリはxxx.desktopファイルの一覧として登録されていることがわかる。
他にも他のデータベースを使ってdconfのデータベースを更新したり、初期値にリセットするオプションがあるので詳細はman dconf を参照。
gsettingsを使用する場合
gsettingsは以下のオプションを使用する。
dconfでディレクトリとよんでいたパスはgsettingsではスキーマと呼び、'/'ではなく'.'区切りである点に注意。
gsettings get <スキーマ> KEY | 設定を読み込む。 |
gsettings set <スキーマ> <KEY> <値> | 値を設定する |
gsettings list-schemas | スキーマの一覧を表示する。膨大な量になる。 |
gsettings list-keys <スキーマ> | スキーマ内のキーの一覧を表示する |
以下はDockに登録されているアプリの一覧を確認した例。
$ gsettings get org.gnome.shell favorite-apps ['org.gnome.Software.desktop', 'org.gnome.clocks.desktop', 'thunar.desktop', 'org.gnome.Terminal.desktop', 'org.gnome.eog.desktop', 'simple-scan.desktop', 'google-chrome.desktop', 'thunderbird.desktop', 'alacarte-made-2.desktop', 'gimp.desktop', 'org.inkscape.Inkscape.desktop', 'org.gnome.gedit.desktop', 'virt-manager.desktop', 'code.desktop', 'org.gnome.Settings.desktop', 'org.gnome.Rhythmbox3.desktop'] 他にも多数のオプションがあるので詳細はman gsettingsを参照。
dconf-editorを使う場合
dconf-editor を実行するとGUIのエディタが起動するので目的のキーを探して編集する。