Java Programme im Unity Launcher
Die neue Oberfläche von Ubuntu, Unity, kann mir im großen durchaus gefallen, in Details geht sie mir teilweise aber ganz schön auf die Nerven. Eines dieser Details konnte ich jetzt für mich lösen: Manche Java Programme machen Probleme im Launcher. Man kann diese genauso wie andere Programme problemlos über die bekannten Mittel in den Unity Launcher packen, sie verhalten sich dort aber sehr untypisch: Wenn man diese aus dem Launcher startet wird ein neuer Eintrag mit dem Namen win0 im Launcher sichtbar, der kein Icon sondern nur ein Fragezeichen hat.
Man kann dieses Programm dann auch nicht wie gewohnt über das eigentliche Launcher Icon verwalten: Es hat keine Markierung für eine gestartete Instanz des Eintrags, ein Klick auf dieses Icon macht nicht die Instanz sichtbar, sondern startet eine neue, die wieder einen weiteren temporären Eintrag im Launcher erzeugt. Unity erkennt also offenbar nicht, dass das gestartete Programm zu dem ursprünglichen Launcher Eintrag gehört, sondern hält es für ein anderes Programm und erstellt nach Unity Launcher Logik einen entsprechend neuen temporären Eintrag.
In diesen Fällen muss man Unity also expliit mitteilen, wie der Thread heißen wird, der von diesem Launcher gestartet wird.
Ein eigenes Launcher File erzeugen
Dazu müssen wir uns erst einmal eine eigenes *.desktop File erzeugen. Wie dies unter Unity am einfachsten geht, ist hier ziemlich gut beschrieben. In meinem Fall handelt es sich um ein UML Tool (genannt MagicDraw). Mein Desktop File, das ich noch um ein selbst erstelltes Icon und einige Menukategorien erweitert habe, sieht nun wie folgt aus:
[Desktop Entry]
Version=1.0
Type=Application
Name=MagicDraw (UML)
Categories=Application;Development;IDE
Comment=MagicDraw UML IDE
Encoding=UTF-8
Exec='/home/grischa/Programme/MagicDraw_UML_Standard_Edition/bin/mduml' %f
Icon=/home/grischa/Programme/MagicDraw_UML_Standard_Edition/magicdraw.png
NoDisplay=false
StartupNotify=true
Terminal=false
Diese Datei können wir nun im Nautilus heraus suchen und einfach in den Launcher ziehen. Es erhält dann das angegebene Icon und startet das UML Tool. Bis hier hin ist das noch Standard, auf diese Weise kann man für jedes Programm eigene Launcher erzeugen, wenn man möchte.
Den Namen des Java Threads im Launcher angeben
Der so erzeugte Launcher reagiert aber wie oben beschrieben mit einem win0 Eintrag im Launcher, und hier kommt der eigentliche Trick: Wenn die Application gestartet ist, starten wir zusätzlich einen Terminal. In diesem geben wir folgendes ein:
xprop WM_CLASS
Wenn wir danach Enter drücken, verändert sich der Maus Cursor. Mit diesem klicken wir nun in das Fenster der gestarteten Java Anwendung. Der Terminal sieht (in meinem Beispiel des Tools MagicDraw) dann so aus:
grischa@grischa-T510:~$ xprop WM_CLASS
WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "com-nomagic-launcher-Launcher"
Der letzte Eintrag "com-nomagic-launcher-Launcher" ist das, was wir gesucht haben, der Name der eigentlich gestarteten Anwendung.
Nun editieren wir noch einmal die obige Desktop Datei und fügen folgende zusätzliche Zeile ein:
StartupWMClass=com-nomagic-launcher-Launcher
Evtl. muss man sich danach noch mal ausloggen und wieder anmelden, aber der Launcher verhält sich nun wie jeder andere Launcher auch: Er bekommt die Markierung, wenn die Anwendung gestartet wurde (anstatt einen temporären Eintrag zu erzeugen, der die Markierung bekommt) und holt die Anwendung in den Vordergrund, wenn man noch einmal darauf klickt.
Ein Detail Problem gelöst, mal sehen ob ich meine weiteren auch bald abhaken kann. Anmerken möchte ich noch, dass das nicht alle Java Programme betrifft. Um genau zu sein, war MagicDraw bei mir bisher sogar die einzige Java Anwendung, die sich so verhielt. Eclipse, Azureus und Freemind hatten das nicht. Vielleicht liegt das daran, dass die drei genannten alle SWT benutzen, MagicDraw jedoch ein uraltes (ich vermute) Swing Programm ist.
Comments
Display comments as Linear | Threaded
Schmidi on :
Danke, war sehr hilfreich!
N. Blum on :
Super Info
Das mit dem win0 kommt bei gar nicht in der 12.04
Meine Java Anwendung funktioniert schon mit Teil1 perfekt
Danke
Grischa
on :
Follow @gbrockhausDas trat bei mir auch in der Tat nicht bei allen Java Anwendungen auf, es war bei mir sogar nur bei einer so. Eclipse hat das z.B. nicht, obwohl das ja auch eine Java Anwendung ist.
Grischa wrote about: Zurück zu Ubuntu Ocelot