Linux benutzt als grafische Umgebung das X11-Paket.
Die Ausgabe wird über eine Netzwerkclient und -serverkomponente gewährleistet.
Wobei die Namensgebung im X11-Kontext (Client/Server) genau andersherum funktioniert als z.B. bei einem Webserver.
Dort ist der Browser der Client.
Der X-Client ist also der Rechner, der die zu startenden Programme beherbergt. Der X-Server stellt die Programmausgabe nur dar.
Der X-Client empfängt vom X-Server seine Befehle über das X11-Protokoll und führt diese aus.
Dann schickt er das Ergebnis an den X-Server der dieses nur noch darstellt.
Das Protokoll ist unverschlüsselt und sollte deshalb nur hinter durch Firewalls geschützte Netze benutzt werden.
Um einen Suse-Rechner zu einem X-Client zu machen, sind folgende Schritte notwendig:
DISPLAYMANAGER_REMOTE_ACCESS = yes (prinzipielle Freigabe übers Netz)
DISPLAYMANAGER_ROOT_LOGIN_REMOTE = yes (wenn der root Zugriff haben soll;Sicherheitsrisiko)
DISPLAYMANAGER_XSERVER_TCP_PORT_6000_OPEN = yes (Standardport 6000 benutzen)
anschließend <beenden> + <speichern>
starte dazu YAST / Sicherheit und Benutzer / Firewall / erlaubte Dienste / zu erlaubender Dienst : Fernzugriff auf Display-Manager <hinzufügen> + <übernehmen>
Oder die Firewall im Yast abschalten (nicht empfohlen).
XDMCP geht nicht mit sddm, gmd, kdm !
zypper in lightdm update-alternatives --config default-displaymanager
wenn der Server aus allen Netzen erreichbar sein soll:
echo "LISTEN *" >>/etc/X11/xdm/Xaccess
reboot
Anschließend sollte ein Zugriff mit „X -query meinServer -once“ von einem entfernten Linuxrechner möglich sein.
Wenn die grafische Oberfläche auf dem entfernten Rechner schon gestartet ist sollte
"X :1 -query meinServeroderIP -once "
einen 2.X-server starten. (Konsole8)
Alternativ ist auch der Start von Xnest möglich.
"Xnest :1 -query meinServeroderIP -once "
Von einem Windowsrechner kann bei installiertem Xming ( download hier ) mit
"c:\programme\xming\xming.exe -query meinServeroderIP -once"
die Linuxoberfläche auf den Windowsrechner geholt werden.
Sicherheitshinweis: in der Datei /var/X11R6/lib/xdm/Xaccess kann der Kreis der erlaubten Rechner eingeschränkt werden.
Dazu muss die Zeile mit dem Sternchen (alle Rechner erlauben) auskommentiert werden.
Stattdessen kann dort einfach eine IPadresse oder ein Rechnername denen der Zugriff erlaubt sein soll, eingetragen werden.
Auch kann stattdessen eine IP-Maske eingetragen werden.z.B. 192.168.1.*
-die gegenseitige DNS-Namensauflösung zwischen den Rechnern funktioniert nicht. Nur die IP angeben funktioniert wegen reverser DNSauflösung nicht!!!
-Ports 6000 und 177 offen?
netstat -pan | grep 6000 netstat -pan | grep 177
dies ist zwingend erforderlich!!!
-der X-Server wird durch eine Firewall geblockt.
Zuerst müssen die benötigten Pakete installiert werden:
apt-get install xdm kde
Danach stellen Sie den StandardDisplaymanager in der Datei /etc/X11/default-display-manager
ein:
/usr/bin/xdm
Danach konfigurieren Sie die Zugriffskontrolle auf die Anmeldung in der Datei /etc/X11/xdm/Xaccess
:
#alle Rechner haben Zugriff: * #oder nur ein Rechner hat Zugriff meinClient
Danach entscheiden Sie ob der lokale X-Server auch gestartet werden soll und auf Anfragen von außen antworten soll:
Löschen Sie dazu alle „-nolisten tcp“ -Einträge. Bsp:
:0 local /usr/bin/X :0 vt7 -nolisten tcp
in
:0 local /usr/bin/X :0 vt7
Danach entscheiden Sie, ob der xdm auf auf externe Anfragen per XDMCP-Protokoll reagieren soll:
Kommentieren Sie dazu in der Datei /etc/X11/xdm/xdm-config
die letzte Zeile mit einem !Ausrufezeichen aus:
!DisplayManager.requestPort 0
Stoppen Sie den xdm:
/etc/init.d/xdm stop
und killen alle eventuell danach noch laufenden xdm und X-Programme:
killall xdm;killall X
starten Sie den xdm neu:
/etc/init.d/xdm start
oder booten den rechner neu.
versuchen Sie sich von einem entfernten Rechner die X-Oberfläche zu holen:
X -query meinServer
oder
X -query meinServer :1
Zuerst müssen die benötigten Pakete installiert werden:
apt-get install gdm3
Dann muss der Anmeldebildschirm noch in der Datei /etc/gdm3/daemon.conf
freigegeben werden:
[xdmcp] Enable=true
Auch soll root sich anmelden können:
[security] AllowRemoteRoot=true
In der PAM-Datei /etc/pam.d/gdm3
den folgenden Eintrag auskommentieren:
#auth required pam_succeed_if.so user != root quiet_success
Dann nur noch den Dienst neustarten:
/etc/init.d/gdm3 restart
Jetzt kann die Anmeldung per X erfolgen:
X -query meinServer :1
myFirmsrv: ein Linuxserver auf dem ein Programm(myprog) installiert ist, dessen Ausgabe ich aber auf meinen Client holen will.
myFirmcln: ein X-server mit einem xtermFenster muss gestartet sein.
zunächst starte ich einen weiteren X-Server auf meinem client(myFirmcln)
X :1 & xterm -display :1
jetzt gebe ich das X-Display für entfernte Verbindungen frei:
xhost +myFirmsrv
dann stelle ich eine ssh-Verbindung zum X-Client (myFirmsrv) her.
ssh einUser@myFirmsrv password: (das Passwort dazu)
dann setze ich die Displayvariable:
export DISPLAY=myFirmcln:1
jetzt starte ich einen minimalen Windowmanager(twm &) und das gewünschte Programm(myprog):
twm & #oder startkde & #oder wmstart & myprog
Auf dem (Client-)Display erscheint jetzt die Ausgabe des gestarten Programms.
Alternative einfache Möglichkeit:
twm -display myFirmcln:1
Firewall ist an
gegenseitige DNS-Auflösung funktioniert nicht.
Editiere die /etc/X11/xorg.conf.
Füge die foldenden Zeilen unter Section „ServerFlags“
zusätzlich ein:
Option "BlankTime" "0" Option "StandbyTime" "0" Option "SuspendTime" "0" Option "OffTime" "0"
starte anschließend den X-Server oder den ganzen Rechner neu.
Xterm-Schriftgröße ändern:
entweder mit [Strg]+reMaus oder
in der ~/.Xresources:
XTerm*Font: 10x20
Kontextmenü von twm ändern :
/usr/share/X11/twm/system.twmrc
zweiten entfernten X-Server starten mit :
X -indirect ServeroderIP :1
oder lokal:
startx -- :1
VESA-treiber in SUSE benutzen obwohl ein anderer Treiber vom system bevorzugt wird :
sax2 -r -m 0=vesa
XMING verdeckt starten:
ohne Authentifizierung!
c:\Programme\Xming\Xming.exe -ac -multiwindow -clipboard +kb -xkblayout de -dpi 108
oder:
"C:\Program Files (x86)\Xming\Xming.exe" -ac -clipboard -multiwindow +kb -xkblayout de -dpi 108
dann auf dem X-Client:
export DISPLAY=entfernterServer:0 twm &
oder besser:
c:\Programme\Xming\Xming.exe -ac -multiwindow -clipboard +kb -xkblayout de -dpi 108 c:\Programme\PuTTY\plink.exe -ssh -X username@xclientsrv export DISPLAY=%computername%:0 ; xterm
zwischen den virtuellen Konsolen umschalten
auf die virtuelle Konsole 1 schalten:
chvt 1
zurück auf den X-server schalten:
chvt 7
Skript zum Ändern der Monitoreinstellungen:
#!/bin/bash # chgMon.sh / Richard Borwinius / 2016 # kleines Skript um die Monitoreinstellungen initial zu ändern, # wenn zwei Monitore vorhanden sind # erforderliche Programme: xrandr, zenity, bash(nicht nur sh!) # Bei Aufruf von "chgMon.sh 2" und zwei angeschlossenen Monitoren wird automatisch xinerama eingestellt buf=(`xrandr 2>/dev/null | grep " connected" | cut -d " " -f1`) echo angeschlossene Monitore ${#buf[*]} ? if [ ${#buf[*]} -eq 2 ]; then if [ $1 -eq 2 ]; then xrandr --output ${buf[0]} --auto --left-of ${buf[1]} --auto exit 0; fi zenity --question --text "Sollen die Monitoreinstellungen jetzt geändert werden?" || exit; auswahl=`zenity --list --radiolist --width=400 --height=400\ --title "Anzeige ändern" \ --text "Wählen Sie die Monitoreinstellungen jetzt aus." \ --column="" --column="" --column="Einstellungen" \ "" "1" "Ausgabe auf Monitor 1" \ "" "2" "Ausgabe auf Monitor 2" \ "" "3" "Xinerama rechts <-> links" \ "" "4" "Xinerama links <-> rechts" \ "" "5" "Monitore Klonen";` echo $? if [ -z "$auswahl" ] ; then auswahl=0 echo Abbruch fi if [ $auswahl -eq 1 ] then xrandr --output ${buf[0]} --auto --output ${buf[1]} --off fi if [ $auswahl -eq 2 ] then xrandr --output ${buf[0]} --off --output ${buf[1]} --auto fi if [ $auswahl -eq 3 ] then xrandr --output ${buf[0]} --auto --left-of ${buf[1]} --auto fi if [ $auswahl -eq 4 ] then xrandr --output ${buf[1]} --auto --left-of ${buf[0]} --auto fi if [ $auswahl -eq 5 ] then xrandr --output ${buf[0]} --auto --output ${buf[1]} --same-as ${buf[0]} --auto fi fi
Mimetypes ändern:
xdg-mime install /opt/Citrix/ICAClient/desktop/Citrix-mime_types.xml update-desktop-database update-mime-database /usr/share/mime
libnotify-tools(suse oder libnotify-bin(debian) muss installiert sein.
als root:
sudo -u benutzername DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus notify-send 'Hello world!' 'This is an example notification.' -t 0
oder:
gdbus call --session \ --dest=org.freedesktop.Notifications \ --object-path=/org/freedesktop/Notifications \ --method=org.freedesktop.Notifications.Notify \ "" 0 "" 'Hello world!' 'This is an example notification.' \ '[]' '{"urgency": <1>}' 5000
oder:
while true; do date=$(date) notify-send "$date" -h string:x-canonical-private-synchronous:my-notification sleep 1
done
busctl call org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager TerminateSession s $(loginctl show-user $UID --property=Sessions --value)
oder
for i in $(loginctl list-sessions --no-legend | sort -r | awk '{ print $1 }');do loginctl terminate-sessions $i;done
alle grafischen Anmeldungen beenden:
systemctl --user stop graphical-session.target
oder
loginctl list-sessions loginctl terminate-session <sessionnummer>
alle angemeldete Sessions anzeigen:
for i in $(loginctl --no-legend list-sessions | awk '{print $1}');do loginctl show-session -p Name -p Active -p Remote -p Type -p Display "$i";echo '-----';done
alle gesperrten Sessions abmelden:
for i in $(loginctl list-sessions --no-legend | sort -r | awk '{ print $1 }'); do if [[ $(loginctl show-session -p LockedHint --value $i) == "yes" ]]; then echo "locked Session from $(loginctl show-session -p Name $i) will be closed." loginctl terminate-session $i fi
erstelle eine Datei /var/lib/AccountsService/users/doedel
mit folgendem Inhalt:
[User] Language= XSession=gnome SystemAccount=true
starte anschießend den displaymanager neu:
systemctl restart display-manager.service