egerlach schrieb:
Danke für Deinen Einsatz und Test für mich. In meinem Fall will der User nicht xeyes auf seinen Desktop holen, sondern jemand anderes schickt ihm die xeyes unaufgefordert auf seinen Desktop.
Die Verbindung kann ja der Rechner initiieren, der eine Software auf einem entfernten Rechner anzeigen will - ist halt etwas mehr Aufwand als nur eine DISPLAY-Umgebungsvariable zu setzen.
Genauer erklärt habe ich ein Kommunikationssystem mit Kurzinfos, mit dem Mitarbeiter von Arztpraxen miteinander kommunizieren, diese Kurznachrichten werden eben nicht vom User angefordert sondern die bekommt dieser naturgemäßt "plötzlich" und ohne dass dieser eine Nachricht angefordert hat, auf seinen Desktop gesendet, ob dieser will oder nicht. Ich brauche also die andere Richtung! Da ist noch was "verrammelt" bei ubuntu, bei älteren Linux-Distributionen, hat Öffnung Port 6000, abgeschaltete Firewall überall und ein xhost + gereicht, um auch von einer zweiten Maschine diese Nachrichten (testweise xeyes) zu senden, nicht nur lokal von der gleichen Maschine. Jetzt nicht mehr.
Wie flexibel bist du da beim Auslesen der Benachrichtigungen aus der Software und der Anzeige selbiger? Nachdem jeder Linux-Desktop mit einem Benachrichtigungsdienst ausgestattet ist, könnte man den Nutzen um eigene Nachrichten auszugeben - z.B. mit notify-send - also z.B. in der einfachsten Form ohne den Sprung über einen Zwischenrechner (wenn man weiß, welcher User eingeloggt ist und als dieser User Zugriff über SSH hat):
ssh user@system 'notify-send -i /usr/share/icons/HighContrast/48x48/status/dialog-warning.png "Warnung" "Dies ist ein sehr wichtiger Hinweis!"'
Da der Notification Service immer im Kontext der User-Session läuft, könnte man sich einen kleinen Helfer basteln, der die Nachrichten an die eingeloggten Nutzer schickt (benötigt root-Rechte): https://unix.stackexchange.com/a/307097
Wenn man unbedingt X übers Netzwerk will, aber an den Sicherungsmaßnahmen des X-Server scheitert, könnte man auch über socat gehen (das hat den Vorteil, dass man den Zugriff auf localhost beschränken und dann über den SSH-Tunnel gehen kann): https://github.com/mviereck/x11docker/wiki/How-to-access-X-over-TCP-IP-network#socat-tcpip-setup
Also z.B. sowas in den Autostart der Desktop-Session packen (ggf. will man noch per bind= Direktive einschränken, von wo socat Verbindungen akzeptiert):
#!/bin/sh
xhost +
Displaynumber=111
socat TCP-LISTEN:$((6000+Displaynumber)),fork UNIX-CONNECT:/tmp/.X11-unix/X$(grep -Po "(?<=:)\d+" <<< "$DISPLAY")
Dann die reverse SSH-Verbindung vom Rechner mit der Software zum Zielsystem "B" über "A" als Zwischenstation aufbauen und den Port weiterleiten:
Und schon kannst du graphische Anwendungen mit DISPLAY=:111 LIBGL_ALWAYS_SOFTWARE=1 als Umgebungsvariablen starten, die dann auf Rechner B erscheinen.