私はデスクトップ環境としてLXDEを使用してDebianシステムを設定しています(実際にはラズベリーパイオペレーティングシステムビデオ)。
付属のアプリケーションがあります。.desktop
文書。クール!
残念ながら、MyApplication.desktop
ファイルにはメニューにアイコンが表示されないようにする次の行が含まれています。
NoDisplay=true
それでは、別のフィールドに触れることなく、システムファイル全体でこの単一のフィールドをオーバーライドする一般的な方法を見つけたいと思います。MyApplication.desktop
これをオーバーライドだと思います。
特に、頑張って避けるこのような回避策は...
sed -e 's/^NoDisplay=true/NoDisplay=false/' /usr/share/applications/MyApplication.desktop \
> /usr/local/share/applications/MyApplication.desktop
...これは、ファイルの最新のアップストリームバージョンで導入された変更が失われるためです(システムから削除したMyApplication.desktop
後もメニュー項目をそのまま残すことができます)。MyApplication
明らかに、標準は部分的な.desktopファイルだけを許可しません。たとえば、次は機能しません。
$ cat /usr/share/applications/MyApplication.desktop
[Desktop Entry]
Name=My Cool Application
GenericName=My Application
Exec=myapp %f
Icon=myapp
Type=Application
Terminal=false
Categories=Application
NoDisplay=true
$ cat /usr/local/share/applications/MyApplication.desktop
[Desktop Entry]
NoDisplay=false
include
同様に、次のメカニズムもありません。
$ cat /usr/local/share/applications/MyApplication.desktop
include=/usr/share/applications/MyApplication.desktop
[Desktop Entry]
NoDisplay=false
これを達成するための私のオプションは何ですか?
答え1
.desktopファイルの新しいバージョンについてはあまり心配しません。ほとんど変更されません(変更した場合、通常、変更は非常にマイナーであり、必要に応じて手動で簡単に編集できます...または変更と一緒に使用してマージできdiff
ます)。patch
これが心配な場合は、.desktopファイルの編集されたコピーを/usr/local/share/applications/
。返品元のファイルをバックアップします(例:から/usr/share/applications/file.desktop
)/usr/share/applications/file.desktop.orig
。
その後、夜または毎週cronジョブを実行して比較し、結果をメールで受け取ることができます(または覚えているときに確認できるようにファイルに書き込むことができます:-)。
cron-jobスクリプトは、次の基本から始まります。
for f in /usr/share/applications/*.desktop.orig; do
bn="$(basename "$f" ".orig")
diff -u "$f" "$bn"
done
/usr/share/applications.backup/
または、セクションに ".orig"を追加して同じ名前に変更したいコピーを作成するdiff
代わりに、パイピングを介して欠落しているファイルに関する警告をミュートすることもできます。-r
grep -v
diff -u -r /usr/share/applications.backup/ /usr/share/applications/ |
grep -v '^Only in /usr/share/applications/`
別のオプションは、git init
/usr/share/applicationsで実行し(ディレクトリがルート所有であるため、ルートとして実行する必要があります)、そこにあるすべての.desktopファイルをコミットし、新しいファイルが追加されたときにコミットすることを覚えておくことです。git status
その後、git diff
などのgitサブコマンドを使用して、git show
違いやコミットされていない変更、新しいファイル、または削除されたファイルを表示できます。
git
はこれらの設定ファイルを管理するための優れたツールであり、単にソースコードプログラミングのためのものではありません。これマネージャーをお待ちくださいたとえば、プログラムはgitを使用してすべての改訂履歴を/ etcに保存します(アップグレードの前後に変更を自動的にコミットするためのapt、yum、dnfなどのフックを含む)。まだインストールしていない場合はインストールする価値があります。 。
答え2
パッケージがアップグレードされると、デスクトップエントリ(.desktop)ファイルが/usr/share/applications
上書きされます。変更を失うことなくファイルを上書きするには、コピーを保存して~/.local/share/applications
変更します。
変更が検出されると、元のデスクトップファイルをオプションで自動的に上書きするように更新されました。
目的:デスクトップファイルの変更を監視し、スクリプトを実行して必要な変更を実装します。
/usr/local/bin/update-myapp-desktop-file.sh
デスクトップファイルを必要に応じて変更するスクリプトを作成します。
#!/usr/bin/env bash
sed -i 's/^NoDisplay=true/NoDisplay=false/' /usr/share/applications/MyApplication.desktop
スクリプトを実行可能としてマークします。chmod 755 /usr/local/bin/update-myapp-desktop-file.sh
/etc/systemd/system/myapp-desktop-file.service
スクリプトを実行するためのsystemdサービスファイルを作成します。
[Unit]
Description=Update MyApp desktop file
[Service]
ExecStart=/usr/local/bin/update-myapp-desktop-file.sh
/etc/systemd/system/myapp-desktop-file.path
デスクトップファイルの変更を監視するには、対応するシステムパスファイルを作成します。
[Unit]
Description=Monitor for changes to MyApp desktop file
[Path]
PathModified=/usr/share/applications/MyApplication.desktop
Unit=myapp-desktop-file.service
[Install]
WantedBy=multi-user.target
- systemdパスファイルを確認、有効化、および起動します。
systemd-analyze verify /etc/systemd/system/myapp-desktop-file.*
systemctl enable myapp-desktop-file.path
systemctl start myapp-desktop-file.path