Perché alcune applicazioni aperte vengono visualizzate come "punti interrogativi" nel programma di avvio di Unity?


22

Sto riscontrando un problema con un paio di programmi che dispongono di launcher in unità ma che creano un'icona separata dopo il lancio. È possibile per il programma di avvio tenere traccia delle finestre che genera per organizzarsi meglio? O questo è un bug in Unity stesso?

inserisci qui la descrizione dell'immagine

Potrebbe non avere importanza, ma questo programma specifico è un programma mono e l'icona generata è elencata come pannello.


@ j-johan-edwards: non sono sicuro di quale programma collegare ma è KeePass2 disponibile nel Software Center.
Andrew Redd,

In alcuni casi puoi alleviarlo impostando la StartupWMClassproprietà nel desktop launcher dell'applicazione: askubuntu.com/questions/36434/…
Glutanimate,

Risposte:


23

Cosa sta succedendo

Problemi come questo riguardano il framework di abbinamento delle applicazioni di Unity. Per semplificare i dettagli tecnici, le finestre dei programmi e le applicazioni sono due cose separate per Ubuntu. Ubuntu deve "indovinare" quale applicazione possiede una determinata finestra. E a volte quell'ipotesi fallisce e appare un punto interrogativo nel programma di avvio.

L'errore potrebbe essere dovuto a:

  1. Un bug in BAMF (il framework di abbinamento delle applicazioni menzionato sopra).
  2. Una descrizione dell'applicazione errata (aka file '.desktop').
  3. La mancanza di una descrizione dell'applicazione a tutti. I file eseguibili che avviano Windows non hanno intrinsecamente questi metadati.

L'applicazione mostrata nella domanda (KeePass2) soffre di un problema di tipo 1 che è stato segnalato al tracker bug appropriato .

Esempi di problemi

Gli esempi seguenti sono tecnici, rivolti ai programmatori che desiderano che la propria applicazione venga visualizzata correttamente nel programma di avvio di Ubuntu.

Problema 3 - Nessuna descrizione dell'applicazione

Affinché un'applicazione si integri con Unity - vale a dire, sia ricercabile nel dash e collocata nel launcher - deve avere una voce desktop. Tali entrate sono poste nel /usr/share/applications/, /usr/local/share/applications/e $HOME/.local/share/applications/(questi ultimi due essendo per software di terze parti, a livello di sistema e utente sola rispettivamente). Si concludono con .desktopun'estensione e seguono questo formato di base:

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

Questa voce avvia un programma chiamando l' Execeseguibile. Ogni volta che quel programma visualizza una finestra o una finestra di dialogo, Unity noterà che il suo eseguibile "appartiene" a questa descrizione dell'applicazione e utilizzerà il dato Namee Iconnel programma di avvio.

Questo è un esempio di barebone. Le specifiche formali coprono molte funzionalità avanzate.

Problema 2 - Descrizione dell'applicazione errata

Supponiamo che my_app.desktopesista in una directory dell'applicazione valida, ma:

  • /file/path/of/my/icon non esiste nel filesystem.
  • /file/path/of/my/icon non è un'immagine.
  • la voce utilizza una sintassi errata o tag non validi.

In nessuno dei casi precedenti, Ubuntu non sarà in grado di elencare correttamente la finestra dell'applicazione nel programma di avvio.

Problema 1 - Un bug in BAMF

A partire da Ubuntu 11.10, BAMF presenta numerosi bug che impediscono la corretta corrispondenza delle applicazioni. Trappole comuni (temporanee) includono:

  • Il Execpercorso è un collegamento simbolico anziché un file normale
  • L'eseguibile è uno script che avvia l'eseguibile principale.

In questi casi, i programmatori non hanno altra scelta che usare una soluzione alternativa, come rimuovere l'astrazione del collegamento simbolico o collegarsi direttamente all'eseguibile. Nessuno di questi è richiesto dalla specifica della voce del desktop stessa.


Un'altra cosa. Puoi avere .desktopfile per la stessa app sia in ~/.local/share/applications/che /usr/share/applications/. Il primo file sovrascrive il secondo anche se l'icona non è specificata in esso.

1

La finestra può essere abbinata all'applicazione solo se è stata impostata la proprietà WM_CLASS. Per fare questo in X11 usi:

XSetClassHint( display, window, &class_hints );

Devi passare un puntatore a una struttura XClassHint con i campi 'res_name' e 'res_class'.


-1

Ho avuto alcuni problemi con 16.04 tra cui le icone in grigio e talvolta il touchpad diventava irregolare (Acer V15 nitro) anche il centro software (forse anche altre icone) non si apriva dall'icona (solo da un comando terminale). Ho trovato una raccomandazione da qualche parte per disinstallare e reinstallare il software gnome. Da quando l'ho fatto, l'intero sistema è stato stabile al 100%, non più icone in grigio e funziona perfettamente. All'inizio sembrava spaventoso quando ho riavviato dopo questa modifica - molti messaggi di sistema al riavvio - quindi fallo a tuo rischio e pericolo.

sudo apt-get autoremove gnome-software && sudo apt-get install gnome-software

2
Questo è completamente estraneo alla domanda.
Martin Thornton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.