Entfernen Sie die Titelleiste eines anderen Programms

10

Ich habe ein Programm mit Glut-Bibliothek entwickelt und möchte die Titelleiste entfernen.

Da es unmöglich ist, die Titelleiste aus der Glut-Bibliothek zu entfernen, muss ich ein externes Tool verwenden, um die Titelleiste zu entfernen.

In Bezug auf die Tatsache, dass es möglich ist, andere Windows-Dekorationen im Windows-Betriebssystem zu manipulieren, hoffe ich, ein ähnliches Mittel für dieses Hindernis zu finden.

Haben Sie eine Idee, wie Sie eine bestimmte Fenstertitelleiste mit einem Skript oder einer einfachen X11-Anwendung entfernen können?

Schwammgenosse
quelle
Fenstermanager können in gewissem Maße auch die Fensterdekorationen manipulieren. Mit IceWM können Sie eine Zeile in ~ / .icewm / winoptions einfügen yourWindow.dTitleBar: 0.
Manatwork
Die Titelleiste eines Fensters wird vom Fenstermanager gezeichnet und verwaltet, nicht von Anwendungen. Fenstermanager entscheiden beispielsweise, ob eine Titelleiste basierend auf ICCCM-Hinweisen oder ihren modernen Derivaten angezeigt werden soll. Ich glaube nicht, dass Sie dies auf eine Weise steuern können, die sowohl von der Anwendung als auch vom Fenstermanager unabhängig ist.
Gilles 'SO - hör auf böse zu sein'

Antworten:

10

Wmctrl

Dies ist verwandt, aber Sie können den Text in der Titelleiste dieser Mystery-Anwendung mit dem Befehl ändern wmctrl.

Beispiel

Angenommen, ich habe die Anwendung ausgeführt gvim. Es wird wie folgt angezeigt, wenn ich die geöffneten Fenster aufliste.

$  wmctrl -l
0x04402eed -1 grinchy N/A
0x00c00003 -1 grinchy Bottom Expanded Edge Panel
0x00c00028 -1 grinchy Top Expanded Edge Panel
0x0120001e  0 grinchy x-nautilus-desktop
0x02a00004  0 grinchy saml@grinchy:~
0x06800003  0 grinchy [No Name] - GVIM

Das gvimFenster hat also den Titel "[No Name] - GVIM". Wir können seinen Namen so ändern, wiederum mit wmctrl:

$ wmctrl -r "[No Name] - GVIM" -N "new name"

Wenn Sie den -lSchalter erneut ausführen, sehen Sie den neuen Namen:

$ wmctrl -l
0x04402eed -1 grinchy N/A
0x00c00003 -1 grinchy Bottom Expanded Edge Panel
0x00c00028 -1 grinchy Top Expanded Edge Panel
0x0120001e  0 grinchy x-nautilus-desktop
0x02a00004  0 grinchy saml@grinchy:~
0x06800003  0 grinchy new name

Alle Dekorationen

In dieser Frage und Antwort von AskUbuntu wird diese Methode mit dem Titel: Kann ich die Titelleiste von MPlayer in gnome ausblenden? .

Es gab diesen Kern von Python - window-toggle-decorations.py , der so aussah, als würde er genau das tun, was Sie wollten. Es kann an Ihre Bedürfnisse angepasst werden.

window-toggle-decorations.py

#! /usr/bin/python2
import gtk.gdk
w = gtk.gdk.window_foreign_new( gtk.gdk.get_default_root_window().property_get("_NET_ACTIVE_WINDOW")[2][0] )
w.set_decorations( (w.get_decorations()+1)%2 ) # toggle between 0 and 1
gtk.gdk.window_process_all_updates()
gtk.gdk.flush()

# now bind this to super-r or something 
slm
quelle
Wow ! es funktionierte ! Es sollte folgendermaßen ausgeführt werden: python2 ./toggle.py . Ich habe so etwas noch nicht gesehen und zumindest habe ich jetzt eine Ahnung von der Antwort. Vielen Dank, dass Sie Smart Looking Man (slm).
Schwammgenosse
Ich habe es mit einem Systemaufruf ("python2 ./toggle.py") getestet und es hat auch funktioniert, aber ich bin sicher, dass sein Code in C ++ konvertierbar ist.
Schwammgenosse
Seltsam ist, dass ich es zweimal aufrufen muss, um etwas zu bewirken !!! System ("python2 ./toggle.py"); System ("python2 ./toggle.py"); es ist lächerlich! aber es funktioniert für mich und es ist genug: D
Schwammgenosse
5

Es gibt ein einfaches C-Programm, das von Muktupavels entwickelt wurde. https://gist.github.com/muktupavels .

Ich benutze es und es funktioniert sehr gut. Es ist hier

https://gist.github.com/muktupavels/d03bb14ea6042b779df89b4c87df975d

Hiermit können Sie die Titelleiste für eine bestimmte Anwendung ein- und ausschalten.

Um es zu verwenden, stellen Sie einfach sicher, dass Sie die libx11-devBibliothek installiert haben

sudo apt-get install -y libx11-dev

Kompilieren Sie dann den Code mit diesem Befehl

gcc toggle-decorations.c -Wall -o toggle-decorations `pkg-config --cflags --libs x11`

und führen Sie es mit diesem Befehl aus

./toggle-decorations $(wmctrl -lx | grep -E "name_of_your_application_here" | grep -oE "[0-9a-z]{10}")

Dabei wird $(...)das --idIhrer Anwendung mit wmctrl erfasst.

Ich habe diese großartige Arbeit nicht gemacht und nehme keine Anerkennung dafür.

Es wurde von Muktupavels gemacht.

Kes
quelle
das einzige was bei Unity / compiz funktioniert hat thx!
Wassermann Power