Wie sendet udev eine Eingabegerätänderungsbenachrichtigung an Xorg?

996
Vi.

Ich möchte das Problem beheben, warum die Grafiktabellen nur dann aktiv sind, wenn sie beim Starten von Xorg verbunden sind (und nicht mehr mit dem Spamming von arbeiten, Xorg.0.logwenn ich sie wieder verbinde).

Soweit ich weiß, arbeiten udev-basierte Hotplugging-Arbeiten von Xorg, die nach dem Start irgendwie mit udev verbunden sind.

  • Wo sind Details dazu? Welcher Mechanismus von Xorg hält sich mit udev in Verbindung? Direkte Socket-Verbindung? D-Bus?
  • Welche Nachrichten sollen in udev oder Xorg-Protokollen nach fehlender Verbindung zwischen udev und Xorg gesucht werden?
  • Wie löse ich manuell die erneute Aufzählung von Eingabegeräten durch Xorg aus?
2

1 Antwort auf die Frage

1
jpetazzo

Es verwendet Mechanismen, die von libudev verfügbar gemacht werden.

Indem wir uns in den Xorg-Quellcode einarbeiten, können wir in udev.c sehen, dass es aufruft udev_monitor_new_from_netlink.

Beim Betrachten des udev-Quellcodes können wir in libudev-monitor.c sehen, dass diese Funktion schließlich einen netlink-Socket erstellt .

Ich kenne keine einfache Möglichkeit, Netlink-Sockets zu "schnüffeln"; Es gibt jedoch wahrscheinlich einen Beispielcode in udev, den Sie kompilieren und ausführen können, um dieselbe Quelle von Ereignissen zu abonnieren und ausführliche Informationen anzuzeigen.

In Ihrer Situation würde ich Folgendes versuchen:

  • Kann ich andere Eingabegeräte trennen bzw. wieder anschließen? (zB eine beliebige USB-Maus oder Tastatur)
  • was sehe ich in udev-protokollen, wenn ich das tablet trenne / wieder anschließen?

Und welche Art von Nachrichten werden übrigens in X-Protokollen ausgegeben?

Etwas über die Unzugänglichkeit des jeweiligen Eingabegeräts. Udev und Xorg liefen in separaten Netzwerk-Namespaces und nur pfadbasierte UNIX-Sockets durchbrachen transparent die Netzwerk-Namespaces. Vi. vor 10 Jahren 0
Gibt es ein Werkzeug wie socat, aber für AF_NETLINK also Sockets? (Ich denke, NETLINK ist für den Kernel <-> Userspace, nicht für den Userspace <-> Userspace ...) Vi. vor 10 Jahren 0