Tại sao các tệp application.desktop của tôi không hiển thị trong menu ứng dụng Linux?


8

Tôi đã viết khá nhiều chương trình nguồn mở trong những năm qua, nhưng không phải gần đây và tôi chưa bao giờ gặp vấn đề này trước đây. Các mục menu cho dự án mới của tôi chỉ đơn giản là từ chối hiển thị trong các menu trên gnome hoặc kde.

Ban đầu tôi chỉ cài đặt các tệp .desktop vào / usr / share / application nhưng sau đó đã sửa đổi nó để sử dụng các tập tin máy tính để bàn - tất cả đều vô ích. Tôi đã thêm cơ sở dữ liệu cập nhật máy tính để bàn vào tập lệnh postinst của mình ... không có gì

Tôi đã xác thực các mục nhập và trong trình quản lý tệp, chúng là chính xác, tôi đã thử cấp cho chúng quyền thực thi ... Tôi không thể tìm thấy bất cứ điều gì sai nhưng chúng sẽ không xuất hiện. Có điều gì mới phải làm để có được các mục menu của ứng dụng của bạn để hiển thị những ngày này không?

Các tập tin .desktop là:

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

mèo 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

Và nếu bất kỳ mã nào khác có thể hữu ích, tất cả đều có thể duyệt trên github: https://github.com/ajventer/ezdm

CẬP NHẬT: Bí ẩn càng sâu sắc, nếu tôi sao chép các tệp vào / usr / share / application / kde4 (điều mà rõ ràng là tôi không muốn làm trong gói của mình - sau tất cả, nó cũng sẽ hoạt động trong gnome), sau đó đột nhiên ezdm.desktop hiển thị trong menu, nhưng ezdm-console.desktop vẫn từ chối.

CẬP NHẬT: vì nó có thể có liên quan: Từ 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

Và 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#

Tôi không chắc vấn đề là ở đâu - rất có thể là mã cài đặt, vì các khả năng nằm rải rác ở nhiều nơi - tôi đã đưa ra một tập hợp các ví dụ và liên kết đến nơi có tất cả các mã khác. Nhưng bằng mọi cách, tôi cũng sẽ thêm makefile và setup.py.


Đúng, đã tìm thấy nó trong khi googling xung quanh - tôi thậm chí còn đề cập đến trong câu hỏi mà tôi đã thử nghiệm với việc cấp quyền + x (giải pháp từ câu hỏi đó)

Vì vậy, nó xuất hiện trong KDE nhưng không có trong Gnome?

Tôi đã không kiểm tra điều đó - tôi chỉ đang cố gắng làm nhiều thứ khác nhau. Nhưng cài đặt vào một thư mục cụ thể KDE4 cũng sẽ điên rồ - vì cách này sẽ hoạt động trên bất kỳ máy tính để bàn nào hiểu đặc tả XDG - tất cả chúng không thể yêu cầu một thư mục menu khác.

Câu trả lời:


2

Có lỗi định dạng trong các tập tin. Dựa trên những người bình luận, tôi chỉ có thể cho rằng một số phiên bản của gnome dễ tha thứ hơn. Dù bằng cách nào tôi cũng tìm thấy một cách tiện lợi để khiến chúng hoạt động: Mở thư mục trong cá heo và chỉnh sửa chúng cho đến khi chúng có thể được khởi chạy từ cá heo - chỉ một khi nó hoạt động, thêm trường danh mục và sau đó chúng hiển thị trong menu. Trong KDE, bạn có thể phải chạy: kbuildsycoca4 - trước hết là nếu bạn không đăng ký lại.

Các phiên bản cuối cùng của tệp là:

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=

Trong trường hợp đó giúp bất cứ ai khác. Tôi vừa mới đưa ra một yêu cầu xây dựng PPA mới, vì vậy các gói ubfox cập nhật sẽ sớm được cung cấp.


2

thử cái này:

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

ra khỏi

man xdg-desktop-menu 

1
Tham khảo trang nam là một khởi đầu tốt, nhưng bạn có thể muốn xem xét trích dẫn các bit có liên quan nhất theo dòng vì sự gọn gàng và đầy đủ.
HalosGhost

1

Có khóa tập tin máy tính để bàn rất ngấm ngầm - TryExec. Theo tài liệu :

Dùng thử

Đường dẫn đến tệp thực thi trên đĩa được sử dụng để xác định xem chương trình có thực sự được cài đặt hay không. Nếu đường dẫn không phải là đường dẫn tuyệt đối, tệp sẽ được tra cứu trong biến môi trường $ PATH. Nếu tập tin không có mặt hoặc nếu nó không được thực thi, mục nhập có thể bị bỏ qua (chẳng hạn như không được sử dụng trong các menu).

Vì vậy, nó có thể dẫn đến thiếu menu nhập nếu nó không được điền đúng. Và bằng cách "đúng" tôi có nghĩa là nó luôn phải chỉ ra thực thi thực tế .

Đáng ngạc nhiên, nếu bạn cố gắng khởi chạy chương trình của mình trong môi trường đã sửa đổi bằng cách sử dụng env, nó sẽ ngừng hoạt động. Dưới đây là ví dụ về tệp máy tính để bàn không hợp lệ từ gói distro của tôi:

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

Nó không hoạt động vì DE tìm kiếm env FONTCONFIG_FILE=/usr/share/fonts/fonts.conf telegram -noupdatethực thi, coi toàn bộ chuỗi (bao gồm cả khoảng trắng) là đường dẫn tệp bị thiếu, tất nhiên.

Giải pháp cũng đơn giản: chỉ cần xác định đường dẫn đến thực thi thực tế (thậm chí tương đối):

TryExec=telegram

0

Rất có thể bởi vì TryExecdòng không chính xác của bạn chỉ ra rằng nó không còn hợp lệ.

TryExec=/usr/games/games/ezdm

Tôi đoán tập tin này không tồn tại, và đặc biệt là không thể thực thi?


Cảm ơn vì sự hiểu biết đó, tôi đã sửa nó trong mã, nhưng các mục trong menu vẫn không hiển thị (tôi thậm chí đã đăng xuất và quay lại để đảm bảo).

Bạn có tình cờ có một ezdm.desktopnơi khác , ví dụ như trong $HOME/.local/share/applications/ezdm.desktop?
Có QUIT - Anony-Mousse

Không có gì tôi có thể tìm thấy, các mục duy nhất trong phiên bản .local là những mục mà rượu tạo ra. Và tôi đã thử nghiệm trên một máy khác (với gnome) không chứa kiểm tra mã (tôi sử dụng nó để cài đặt sạch kiểm tra các gói).

0

Ít nhất là trên Ubuntu 19.10, một nguyên nhân có thể là do nhị phân được tham chiếu bởi Execkhông tồn tại trên $PATH. Điều này đúng bất kểTryExec dòng của bạn ; bạn cần cả hai dòng để chỉ các tệp thực thi tồn tại $PATHhoặc ứng dụng của bạn sẽ không hiển thị trong menu ứng dụng.

Vì vậy: kiểm tra kỹ bạn đã đánh máy chữ thực thi ở đầu Exec=dòng của bạn và nó thực sự tồn tại.


0

Ngoại trừ các lỗi cú pháp trong .desktopcác tệp, tôi phải nói, không phải mọi .desktoptệp trong /usr/share/applicationsđều phải hiển thị trong menu launcher cùng.

Có một bộ quy tắc phức tạp để xác định cái nào .desktop filessẽ được liệt kê trong menu launcher được xuất bản trong tài liệu xdg:

https://www.freedesktop.org/wiki/Specutions/menu-spec/


-1

Nhấn vào đây để biết một application.desktoptập tin là gì .

Giải pháp:

Tệp phải tồn tại trong máy tính của bạn nếu chương trình được cài đặt, do đó không cần phải viết một tệp khác. Vấn đề là không có trong thư mục mà bạn cần nó để hiển thị trên gnome-shell của bạn. Chạy phần sau nếu bạn muốn nếu không phải tất cả các tệp application.desktop của bạn sẽ hiển thị trong gnome-shell. Nếu bạn chưa càifindđặt, hãy cài đặt nó theo thông lệ tốt nhất trong phân phối của bạn. Trong trường hợp của tôi :sudo apt-get install find.


  # change the value of LOOKHERE for any directory
  LOOKHERE=/etc  ;
  for p in `sudo find * "${LOOKHERE}" | grep -E *\\.desktop$`; do
      sudo cp  ${p}  $HOME/.local/share/applications/ ;
  done

find * "${LOOKHERE}" | grep -E *\\.desktop$

Việc cuối cùng nên đặt một cái gì đó như nếu LOOKHERE/share:

/usr/share/gnome/autostart/nautilus-autostart.desktop
/usr/share/gnome/autostart/gnome-user-share-obexpush.desktop
/usr/share/gnome/wm-properties/metacity-wm.desktop
                           .
                           .
                           .
/usr/share/tracker/miners/tracker-miner-applications.desktop
/usr/share/tracker/miners/tracker-miner-userguides.desktop


Cảnh báo:

Biến LOOKHEREkhi được đặt thành /một mình cũng sẽ nhìn vào bên trong bất kỳ phương tiện lưu động nào và các tệp đó có thể được trỏ đến các chương trình không tồn tại trên máy cục bộ của bạn. Hãy chắc chắn rằng bất kỳ câu lệnh exec nào đều được kiểm tra chéo với which application-nameđiều đó sẽ trả về câu lệnh exec hợp lệ của bạn như which bashtrả về /bin/bash. Nếu whichkhông làm việc kiểm tra whereisđể bắt đầu. Để biết thêm thay đổi sử dụng dconfhoặc gsettings.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.