web-dev-qa-db-ja.com

Linuxアプリケーションメニューにapplication.desktopファイルが表示されないのはなぜですか?

私は長年にわたってかなりの数のオープンソースプログラムを作成してきましたが、最近ではなく、この問題を以前に経験したことがありません。私の新しいプロジェクトのメニュー項目は、単にgnomeまたはkdeのメニューに表示されることを拒否しています。

最初は.desktopファイルを/ usr/share/applicationsにインストールしましたが、後でそれを変更して、desktop-file-utilsを使用します。 post-instスクリプトにupdate-desktop-databaseを追加しました...何もありません

エントリを検証しましたが、ファイルマネージャーでは正しいので、実行権限を与えようとしました...何も問題はありませんが、表示されません。最近、アプリのメニュー項目を表示するために何か新しいことをする必要がありますか?

.desktopファイルは次のとおりです。

silentcoder@ravenriley ~/SOURCE/ezdm $ cat ezdm.desktop 
[Desktop Entry]
Type=Application
Name=EZDM
GenericName=Easy Dungeon Master
Comment=A tookit for AD&D Dungeon Master
TryExec=/usr/games/ezdm
Exec=/usr/games/ezdm
Categories=Game;RolePlaying;
Icon=/usr/share/icons/hicolor/128x128/ezdm.png
Terminal=false

猫ezdmconsole.desktop

[Desktop Entry]
Type=Application
Name=EZDM-Console
GenericName=Easy Dungeon Master (Console version)
Comment=A tookit for AD&D Dungeon Master
TryExec=/usr/games/ezdm --console
Exec=/usr/games/ezdm --console
Categories=Game;RolePlaying;
Icon=/usr/share/icons/hicolor/128x128/ezdm-console.png
Terminal=1
X-Desktop-File-Install-Version=0.20

そして、他のコードのいずれかが有用である場合、それはすべてgithubで参照できます。 https://github.com/ajventer/ezdm

更新:ファイルを/ usr/share/applications/kde4にコピーした場合(これは明らかにパッケージで実行したくないので、結局、gnomeでも動作するはずです)、突然ezdm.desktopが実行するので、謎はさらに深まります。メニューに表示されますが、ezdm-console.desktopは引き続き拒否します。

更新:関連する可能性があるため:Makefileから:

install:
                $(PYTHON) setup.py install --prefix=/${PREFIX} --root $(DESTDIR) --install-scripts=/${PREFIX}/games/ --no-compile --force --record .install.record --install-layout=deb
                mkdir -p ${DESTDIR}/${PREFIX}/share/applications
                mkdir -p ${DESTDIR}/${PREFIX}/share/icons/hicolor/128x128/
                desktop-file-install --dir=${DESTDIR}/${PREFIX}/share/applications/ ezdm.desktop 
                desktop-file-install --dir=${DESTDIR}/${PREFIX}/share/applications/ ezdm-console.desktop 
                install -g root -o root -m 0666 ezdm.png ${DESTDIR}/${PREFIX}/share/icons/hicolor/128x128/ezdm.png
                install -g root -o root -m 0666 ezdm-console.png ${DESTDIR}/${PREFIX}/share/icons/hicolor/128x128/ezdm-console.png 
                update-desktop-database ${DESTDIR}/${PREFIX}/share/applications

そしてdebian/postinst:

cat debian/postinst 
#!/bin/bash -x
ln -sf /usr/games/ezdm* /usr/bin
for I in /usr/lib/python2.7/dist-packages/ezdm_libs/*.py; do
        python -m compileall $I
done
update-desktop-database
#DEBHELPER#
8
silentcoder

ファイルにフォーマットエラーがありました。コメントに基づいて、私はgnomeのいくつかのバージョンがより寛容であると仮定することができます。どちらの方法でも、それらを動作させるための気の利いた方法を見つけました。イルカでディレクトリを開き、イルカから起動できるように編集します。動作するのは一度だけで、カテゴリフィールドを追加すると、メニューに表示されます。 KDEでは、ログを再作成しない場合は、最初にkbuildsycoca4 --noincrementalを実行する必要があります。

ファイルの最終バージョンは次のとおりです。

cat ezdm.desktop 
[Desktop Entry]
Categories=Game;RolePlaying;
Comment[en_US]=A tookit for ADnD Dungeon Master
Comment=A tookit for ADnD Dungeon Master
Exec=/usr/games/ezdm
GenericName[en_US]=Easy Dungeon Master
GenericName=Easy Dungeon Master
Icon=/usr/share/icons/hicolor/128x128/ezdm.png
MimeType=
Name[en_US]=EZDM
Name=EZDM
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
TryExec=/usr/games/ezdm
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=
X-KDE-SubstituteUID=false
X-KDE-Username=

silentcoder@ravenriley ~/SOURCE/ezdm0/ezdm $ cat ezdm-console.desktop 
[Desktop Entry]
Categories=Game;RolePlaying;
Comment[en_US]=EZDM Console Version
Comment=EZDM Console Version
Exec=/usr/games/ezdm --console
GenericName[en_US]=EZDM Console Version
GenericName=EZDM Console Version
Icon=/usr/share/icons/hicolor/128x128/ezdm-console.png
MimeType=
Name[en_US]=EZDM-Console
Name=EZDM-Console
Path=
StartupNotify=true
Terminal=true
TerminalOptions=
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=none
X-KDE-SubstituteUID=false
X-KDE-Username=

それが他の誰かを助ける場合。新しいPPAビルドリクエストをプッシュしたので、更新されたubuntuパッケージがまもなく利用可能になります。

2
silentcoder

これを試して:

xdg-desktop-menu forceupdate [--mode mode]

のうち

man xdg-desktop-menu 
2
toto

非常に油断ならないデスクトップファイルキー-TryExecがあります。 docs によると:

TryExec

プログラムが実際にインストールされているかどうかを判別するために使用されるディスク上の実行可能ファイルへのパス。パスが絶対パスでない場合、ファイルは$ PATH環境変数で検索されます。ファイルが存在しない場合、または実行可能でない場合、エントリは無視される場合があります(たとえば、メニューでは使用されません)。

そのため、適切に入力されていないと、メニューエントリが失われる可能性があります。そして、「適切に」とは、常に実際の実行可能ファイルを指している必要があることを意味します。

驚いたことに、変更された環境でenvを使用してプログラムを起動しようとすると、機能しなくなります。これは、私のディストリビューションのパッケージからの無効なデスクトップファイルの例です。

TryExec=env FONTCONFIG_FILE=/usr/share/fonts/fonts.conf telegram -noupdate
Exec=env FONTCONFIG_FILE=/usr/share/fonts/fonts.conf telegram -noupdate -- %u

DEはenv FONTCONFIG_FILE=/usr/share/fonts/fonts.conf telegram -noupdate実行可能ファイルを検索し、文字列全体(スペースを含む)をファイルパスとして処理するため、機能しません。

解決策も簡単です。実際の実行可能ファイルへのパスを指定するだけです(たとえ相対パスでも)。

TryExec=telegram
1
tosh

少なくともUbuntu 19.10では、考えられる原因の1つは、Execによって参照されるバイナリが$PATHに存在しないことです。これは本当です無関係TryExec行の$PATHに存在する実行可能ファイルを参照するには、両方行が必要です。そうしないと、アプリケーションはアプリケーションメニューに表示されません。

したがって、Exec=行の先頭に実行可能ファイルを入力していないこと、および実行可能ファイルが実際に存在することを再確認してください。

0
Mark Amery

ほとんどの場合、誤ったTryExec行が無効であることを示しています。

TryExec=/usr/games/games/ezdm

このファイルは存在しないと思いますが、特に実行可能ではありませんか?