Ich habe ein Programm erstellt, das ein Fenster mit XCreateWindow erstellt. Dies funktioniert perfekt auf meinem System und vielen anderen, aber auf vielen, verursacht es ein paar seltsame Probleme. z.B. Die ID, die ich davon bekommen habe, kollidiert mit der ID des Terminals, von dem das Programm gestartet wird. In einem solchen Fall hat gnome-terminal auch die Fenster-ID 0x2400001 (Eltern ist root) und die Fenster-ID meines Programms ist ebenfalls 0x2400001 (sein Elternteil ist auch root). Irgendwelche Vorschläge, was schief gehen könnte?XCreateWindow gibt eine Fenster-ID, die mit bereits vorhandenem Fenster kollidiert
Antwort
Die Fenster-IDs sind wahrscheinlich nur innerhalb jeder Verbindung zum X-Server eindeutig (d. H. Verschiedene Prozesse, die mit dem X-Server verbunden sind, erhalten dieselbe Fenster-ID und der X-Server verwendet die ID der Verbindung UND des Fensters, um sie intern zu trennen).
Ich denke X macht keine Versprechen über die Fenster-ID, z. Da sie über Prozesse hinweg einzigartig sind, ist es besser, sie nicht für andere Zwecke zu verwenden.
Ich wäre nicht überrascht, X-Implementierungen zu sehen, die nur fortlaufende Nummern als Fenster-IDs zurückgeben, beginnend mit dem gleichen Wert (z.B. 1) für jede Verbindung, was Ihre Erfahrung erklären würde, z.B. Das erste Fenster in jedem Client scheint dieselbe Fenster-ID auf dieser X-Implementierung zu haben.
Fenster IDs sind einzigartig über eine X-Anzeige. Andernfalls könnten X-Clients nicht auf die Fenster des jeweils anderen verweisen. – daf
Der Xserver erstellt für jedes Fenster eine eindeutige opake ID. Die Methode, die Sie zum Identifizieren der Fenster-ID verwenden, ist wahrscheinlich falsch.
Ihre Frage ist ein Symptom für ein anderes Problem. Welches Problem versuchen Sie wirklich zu lösen?
Fenster-IDs werden von X-Clients generiert, nicht vom X-Server. – daf
Zusätzlich zu den anderen Antworten: run xwininfo -root -all
(lesen Sie die man-Seite für weitere Informationen). Suchen Sie nach der Fenster-ID des Gnome-Terminals und nach der Fenster-ID Ihrer App.
Könnten Sie bitte näher erläutern, wie erhalten Sie die Fenster-ID des Terminals? Auch ein Code-Snippet, das skizziert, was Sie tun, könnte hilfreich sein. – EFraim