Dlaczego niektóre otwarte aplikacje pojawiają się jako „znaki zapytania” w programie uruchamiającym Unity?

22

Mam problem z kilkoma programami, które mają programy uruchamiające w jedności, ale po uruchomieniu tworzą osobną ikonę. Czy program uruchamiający może śledzić okna, które spawnuje, aby lepiej zorganizować? Czy jest to błąd w samej Unity?

wprowadź opis zdjęcia tutaj

To może nie mieć znaczenia, ale ten konkretny program jest programem mono, a ikona spawn jest wyświetlana jako panel.

Andrew Redd
źródło
@ j-johan-edwards: Nie jestem pewien, z jakim programem się połączyć, ale jest to KeePass2 dostępny w Centrum oprogramowania.
Andrew Redd,
W niektórych przypadkach można to złagodzić, ustawiając StartupWMClasswłaściwość w programie uruchamiającym pulpit aplikacji: askubuntu.com/questions/36434/…
Glutanimate

Odpowiedzi:

23

Co się dzieje

Takie problemy dotyczą struktury dopasowywania aplikacji Unity. Aby uprościć szczegóły techniczne, okna programu i aplikacje to dwie osobne rzeczy dla Ubuntu. Ubuntu musi odgadnąć, która aplikacja ma określone okno. Czasami ta próba kończy się niepowodzeniem, aw programie uruchamiającym pojawia się znak zapytania.

Awaria może być spowodowana:

  1. Błąd w BAMF (wyżej wspomniany framework dopasowywania aplikacji).
  2. Błędny opis aplikacji (inaczej „plik .desktop”).
  3. Brak jakiegokolwiek opisu aplikacji. Pliki wykonywalne, które uruchamiają system Windows, z natury nie mają tych metadanych.

Aplikacja pokazana w pytaniu (KeePass2) ma problem typu 1, który został zgłoszony do odpowiedniego narzędzia do śledzenia błędów .

Przykłady problemów

Poniższe przykłady mają charakter techniczny i są przeznaczone dla programistów, którzy chcą, aby ich aplikacja wyświetlała się poprawnie w programie uruchamiającym Ubuntu.

Problem 3 - Brak opisu aplikacji

Aby aplikacja mogła się zintegrować z Unity - to znaczy, że można ją przeszukiwać w Dash i umieszczać w programie uruchamiającym - musi mieć pozycję na pulpicie. Takie wpisy są umieszczone w /usr/share/applications/, /usr/local/share/applications/i $HOME/.local/share/applications/(te dwa ostatnie są dla oprogramowania osób trzecich, w całym systemie, a użytkownik tylko odpowiednio). Kończą się .desktoprozszerzeniem i mają ten podstawowy format:

[Desktop Entry]
Type=Application
Name=My Application's Name
Icon=/file/path/of/my/icon
Exec=/file/path/of/my/executable

Ten wpis uruchamia program przez wywołanie Execpliku wykonywalnego. Ilekroć ten program wyświetla okno lub okno dialogowe, Unity zauważy, że jego plik wykonywalny „należy” do tego opisu aplikacji i używa podanego Nameoraz Iconw programie uruchamiającym.

To jest prosty przykład. Formalna specyfikacja obejmuje wiele zaawansowanych funkcji.

Problem 2 - błędny opis aplikacji

Załóżmy, że my_app.desktopistnieje on w prawidłowym katalogu aplikacji, ale:

  • /file/path/of/my/icon nie istnieje w systemie plików.
  • /file/path/of/my/icon nie jest obrazem.
  • wpis używa niepoprawnej składni lub niepoprawnych znaczników.

W każdym z powyższych przypadków Ubuntu nie będzie w stanie poprawnie wyświetlić okna aplikacji w programie uruchamiającym.

Problem 1 - Błąd w BAMF

Począwszy od Ubuntu 11.10, BAMF ma wiele błędów, które uniemożliwiają prawidłowe dopasowanie aplikacji. Typowe (tymczasowe) pułapki obejmują:

  • ExecŚcieżka bycia dowiązania symbolicznego zamiast zwykłego pliku
  • Plik wykonywalny jest skryptem uruchamiającym główny plik wykonywalny.

W takich przypadkach programiści nie mają innej opcji, jak tylko zastosować obejście, takie jak usunięcie symbolicznej abstrakcji łącza lub bezpośrednie połączenie z plikiem wykonywalnym. Żaden z nich nie jest wymagany przez samą specyfikację pozycji pulpitu.

Jjed
źródło
Jeszcze jedna rzecz. Możesz mieć .desktoppliki dla tej samej aplikacji zarówno w, jak ~/.local/share/applications/i /usr/share/applications/. Pierwszy plik zastępuje drugi, nawet jeśli nie określono w nim ikony.
1

Okno można dopasować do aplikacji tylko wtedy, gdy ustawiono właściwość WM_CLASS. Aby to zrobić w X11, używasz:

XSetClassHint( display, window, &class_hints );

Musisz przekazać wskaźnik do struktury XClassHint z polami „res_name” i „res_class”.

Bram
źródło
-1

Miałem kilka problemów z 16.04, w tym wyszarzone ikony, a czasami touchpad stał się nieregularny (Acer V15 nitro), a także centrum oprogramowania (może także inne ikony) nie otwierało się z ikony (tylko z polecenia terminalu). Znalazłem zalecenie, aby odinstalować i ponownie zainstalować oprogramowanie gnome. Odkąd to zrobiłem, cały system jest w 100% stabilny, nie ma już szarych ikon i działa idealnie. Początkowo wyglądało to przerażająco, kiedy zrestartowałem się po tej zmianie - wiele komunikatów systemowych przy ponownym uruchomieniu - więc zrób to na własne ryzyko.

sudo apt-get autoremove gnome-software && sudo apt-get install gnome-software
Steve
źródło
2
Jest to całkowicie niezwiązane z pytaniem.
Martin Thornton,