
私はアプリを作成していますアイコンをインストールするアプリケーション固有の拡張機能(.crystalopen
)は、Ubuntu / GNOMEだけでなく、他のデスクトップ環境に移植可能KDE のように。
アプリは~/.local/bin
(ではなく/usr/bin
)にインストールされるため、ルート権限は必要ありません。そのため、アイコンインストール済み~/.local/
もし可能なら。
私が試したこと
私MIMEタイプを登録する(application/vnd.crystal-opener
)拡張子を使用するには、次のような.crystalopen
を作成します。application-vnd.crystal-opener.xml
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
<mime-type type="application/vnd.crystal-opener">
<comment>Crystal Opener</comment>
<glob pattern="*.crystalopen"/>
</mime-type>
</mime-info>
次のようにインストールします:
$ xdg-mime install --mode user application-vnd.crystal-opener.xml
内部的には:
~/.local/share/mime/packages
必要に応じて中間ディレクトリを作成し、にコピーします。update-mime-database ~/.local/share/mime/
更新を実行します~/.local/share/mime/mime.cache
。
私MIMEタイプが登録されていることを確認するファイル拡張子を持つ空でない1 つのファイルを作成し、その MIME タイプを照会します。
$ echo OPEN > OPEN.crystalopen
$ xdg-mime query filetype OPEN.crystalopen
application/vnd.crystal-opener
または同等です(GNOME の場合):
$ gio info OPEN.crystalopen | grep standard::content-type
standard::content-type: application/vnd.crystal-opener
私アイコン画像を作成するMIME タイプに適切なファイル名application-vnd.crystal-opener.svg
:
<svg height="128" width="128">
<ellipse cx="43" cy="32" rx="32" ry="32" style="fill:red" />
<ellipse cx="84" cy="32" rx="32" ry="32" style="fill:green" />
</svg>
のアイコンテーマ仕様他のすべてのテーマが継承する「hicolor」テーマにそのような画像をインストールできるはずだと言っています。しかし、それはうまくいかないようです。特に、次の操作を行うと:
$ sudo cp application-vnd.crystal-opener.svg /usr/share/icons/hicolor/scalable/mimetypes
$ sudo update-icon-caches /usr/share/icons/*
OPEN.crystalopen
ファイル アプリ内のファイルのアイコンは新しい画像に変更されません。
ファイルアプリはテーマの継承を正しく実装していない可能性がありますか? 2
代わりに、システムのデフォルト テーマがどのテーマであるかを特定し、そこにアイコンをインストールしますが、これはあまり信頼性が高くなく、移植性も高くありません。
- 私システムのデフォルトテーマの候補を特定する次のような一般的な MIME タイプのアイコンを探します
text/html
。
$ find /usr/share/icons -name 'text-html.*'
/usr/share/icons/Yaru/... (10 lines)
/usr/share/icons/HighContrast/... (1 line)
/usr/share/icons/Humanity/... (7 lines)
最終的に、
Humanity
このシステム (Ubuntu 23) のシステム デフォルト テーマになりました。まず、アイコンをマシン全体のテーマ ディレクトリにインストールしてみます。
$ sudo cp application-vnd.crystal-opener.svg /usr/share/icons/Humanity/mimes/256
$ sudo update-icon-caches /usr/share/icons/*
OPEN.crystalopen
これで成功し、ファイル アプリ内のファイルのアイコンが新しい画像に正常に更新されました。- しかし私はユーザーのテーマディレクトリにインストールするマシン全体のテーマ ディレクトリではなく、代わりに次のようにします。
$ mkdir -p ~/.local/share/icons/Humanity/mimes/256
$ cp application-vnd.crystal-opener.svg ~/.local/share/icons/Humanity/mimes/256
$ sudo update-icon-caches /usr/share/icons/* # not sufficient to update: ~/.local/share/icons/*
- これも機能し、
OPEN.crystalopen
ファイル アプリ内のファイルのアイコンが新しい画像に正常に更新されます。(ただし残念ながら、sudo
アイコンがすぐに表示されるようにするには、次のログアウトとログインの前に、マシン全体のアイコン キャッシュを更新する必要があります。)
大きな疑問
ファイルアプリ内の関連ファイルのアイコンが新しい画像に更新されるように、信頼性が高く移植性の高い方法で、ユーザーテーマディレクトリにアイコンをインストールするにはどうすればよいでしょうか。GNOME だけでなく、KDE やその他のデスクトップ環境でも動作するものはありますか?
~/.local/share/icons/hicolor
特に、テーマにアイコンをインストールすることは可能ですか?アイコンテーマ仕様常に利用可能でしょうか?
1application/x-zerosize
空のファイルは、登録されている新しいカスタム MIME タイプではなく、のような MIME タイプとして認識されることがよくあります。
2「Nautilusは[テーマ]継承ルールに従わない」https://askubuntu.com/a/752316/1724736
答え1
テーマ間のアイコンの継承が正しく機能していないようだったので、アプリのアイコンをインストールするスクリプトを作成しました。全てシステム上のテーマ。乱雑だが効果的。
参照してください124行のカスタムインストールコード私はこれを達成していました。