Im X-Umfeld werden Applikationen als "X-Clients" bezeichnet, die Zeichen-Requests an die Darstellungseinheit senden. Die Darstellungs-Einheit steuert die Grafikhardware, Tastatur und Maus an und wird als "X-Server" bezeichnet. Ein X-Server kann dabei ein oder mehrere "(X-)Screens" verwalten.
Anwendung (Client) und X-Display (Server) koennen auf dem gleichen Rechner laufen, muessen aber nicht. Das X Window System ist netzwerk-transparent, Anwendungen auf diversen entfernten Rechnern können ihre grafischen Ausgaben auf einen X-Server umlenken.
Architektur:
Application code \ X toolkits (Xt, gtk, Qt) } X Client Xlib / ------- X-Server Hardware
Das Display, an das der X-Client seine Ausgabe sendet steht üblicherweise in der Umgebungsvariable DISPLAY, die Variable wird von Anwendungen automatisch ausgelesen, sie wird beim starten des X Servers auf die Adresse des lokalen Displays (localhost:0.0 bzw. :0) gesetzt.
Die Rechner-lokale Kommunikation zwischen Clients und X-Server geschieht ueber Unix-Domain Sockets (/tmp/.X11-unix/X0), zwischen verschiedenen Rechner kann die Kommunikation ueber TCP/IP oder DECnet geschehen.
Nötig, um unberechtigte Zeichen-Zugriffe und v.a. Auslesen von Tastatur- und Maus-Events zu verhindern.
Problem bei xhost ist, dass allen Clients auf dem angegebenen Rechner Zugriff auf das lokale Display erlaubt wird, was ggf. zu einem Sicherheitsproblem fuehren kann. Besser ist hier der "xauth" Mechanismus als Alternative.
Beispiele:
Beispiele:
Syntax: BxH+xoff+yoff
B, H: Breite und Höhe in Pixeln oder (bei xterm) Zeichen. xoff und yoff sind Abstand vom linken/rechten und oberen/unteren Bildschirmrand:
|
|
BxH bzw. +xoff+yoff (oder entsprechend mit -) können weggelassen werden, um nur die Lage bzw. Größe des Fensters festzusetzen.
Beispiel:
| Option | Bedeutung |
|---|---|
| -fg farbe | Vordergrundfarbe festlegen |
| -bg farbe | Hintergrundfarbe festlegen |
| -fn font | Zeichensatz festlegen (xterm, ...) |
| -display dsp | Display, auf dem die Ausgabe erfolgen soll |
| -iconic | Iconifiziert starten |
| -title string | Fenstertitel festlegen |
| -geometry BxH+x+y | Fenstergroesse & -position |
Viele "moderne" X-Programme (KDE, GNOME, ...) implementieren diese Optionen nicht durchgängig!
*foreground: black *background: gray80 *scrollBar*background: red
XTerm*background: white XTerm*foreground: black XTerm*font: -misc-fixed-medium-*-*-*-13-*-*-*-*-*-iso8859-* XTerm*scrollBar*background: black XTerm*scrollBar*foreground: LightGray XClock*font: 12x24 XClock*background: white XClock*foreground: black XClock*hands: red XClock*update: 1 XClock*analog: true
Einstellungen können gemacht werden in ~/.Xdefaults (MIT X11/XFree) bzw. ~/.Xressources (OpenWindows), ~/Klasse (z.B. ~/XTerm) oder /usr/X11R6/lib/X11/app-defaults/Klasse (MIT X11/XFree) bzw. /usr/openwin/lib/X11/app-defaults/Klasse (OpenWindows).
Einlesen von Dateien in die X Ressource Datenbank: xrdb -merge datei.
|
|
noon% xev
Outer window is 0x1800001, inner window is 0x1800002
ButtonPress event, serial 22, synthetic NO, window 0x1800001,
root 0x2e, subw 0x1800002, time 2991767946, (33,51),
root:(366,260),
state 0x0, button 3, same_screen YES
ButtonRelease event, serial 22, synthetic NO, window 0x1800001,
root 0x2e, subw 0x1800002, time 2991768170, (33,51),
root:(366,260),
state 0x400, button 3, same_screen YES
KeyPress event, serial 22, synthetic NO, window 0x1800001,
root 0x2e, subw 0x1800002, time 2991770797, (33,51),
root:(366,260),
state 0x0, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 characters: ""
KeyRelease event, serial 27, synthetic NO, window 0x1800001,
root 0x2e, subw 0x1800002, time 2991771124, (33,51),
root:(366,260),
state 0x1, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 characters: ""
|
noon% xlsfonts | wc -l
1228
noon% xlsfonts
-adobe-courier-bold-o-normal--0-0-100-100-m-0-iso10646-1
-adobe-courier-bold-o-normal--0-0-100-100-m-0-iso8859-1
-adobe-courier-bold-o-normal--0-0-75-75-m-0-iso10646-1
-adobe-courier-bold-o-normal--0-0-75-75-m-0-iso8859-1
-adobe-courier-bold-o-normal--10-100-75-75-m-60-iso10646-1
-adobe-courier-bold-o-normal--10-100-75-75-m-60-iso8859-1
-adobe-courier-bold-o-normal--11-80-100-100-m-60-iso10646-1
-adobe-courier-bold-o-normal--11-80-100-100-m-60-iso8859-1
Fonts sind vom X-Server abhängig, wenn eine Anwendung einen bestimmten Zeichensatz benötigt, dann muß dieser dem X-Server bekannt gemacht werden.
noon% xset
usage: xset [-display host:dpy] option ...
To turn bell off:
-b b off b 0
To set bell volume, pitch and duration:
b [vol [pitch [dur]]] b on
To disable bug compatibility mode:
-bc
To enable bug compatibility mode:
bc
To turn keyclick off:
-c c off c 0
To set keyclick volume:
c [0-100] c on
To control Energy Star (DPMS) features:
-dpms Energy Star features off
+dpms Energy Star features on
dpms [standby [suspend [off]]]
force standby
force suspend
force off
(also implicitly enables DPMS features)
a timeout value of zero disables the mode
To control font cache:
fc [hi-mark [low-mark [balance]]]
both mark values spcecified in KB
balance value spcecified in percent (10 - 90)
Show font cache statistics:
fc s
To set the font path:
fp= path[,path...]
To restore the default font path:
fp default
To have the server reread font databases:
fp rehash
To remove elements from font path:
-fp path[,path...] fp- path[,path...]
To prepend or append elements to font path:
+fp path[,path...] fp+ path[,path...]
To set LED states off or on:
-led [1-32] led off
led [1-32] led on
To set mouse acceleration and threshold:
m [acc_mult[/acc_div] [thr]] m default
To set pixel colors:
p pixel_value color_name
To turn auto-repeat off or on:
-r [keycode] r off
r [keycode] r on
r rate [delay [rate]]
For screen-saver control:
s [timeout [cycle]] s default s on
s blank s noblank s off
s expose s noexpose
s activate s reset
For status information: q
noon% xdpyinfo name of display: :0.0 version number: 11.0 vendor string: The XFree86 Project, Inc vendor release number: 40100000 XFree86 version: 4.1.0 ... default screen number: 0 number of screens: 1 screen #0: dimensions: 1024x768 pixels (347x260 millimeters) resolution: 75x75 dots per inch depths (7): 16, 1, 4, 8, 15, 24, 32 root window id: 0x2e depth of root window: 16 planes ...
noon% xwininfo
xwininfo: Please select the window about which you
would like information by clicking the
mouse in that window.
xwininfo: Window id: 0xa0000e "xterm"
Absolute upper-left X: 514
Absolute upper-left Y: 21
Relative upper-left X: 0
Relative upper-left Y: 0
Width: 499
Height: 316
Depth: 16
Visual Class: TrueColor
...
Corners: +514+21 -11+21 -11-431 +514-431
-geometry 80x24-6+0
noon% xhost access control enabled, only authorized clients can connect noon% xhost +194.95.108.12 194.95.108.12 being added to access control list noon% xhost access control enabled, only authorized clients can connect INET:194.95.108.12 noon% xhost -194.95.108.12 194.95.108.12 being removed from access control list noon% xhost access control enabled, only authorized clients can connect
noon% xclock -geometry +0+0 & [1] 678 noon% xkill Select the window whose client you wish to kill with button 1.... xkill: killing creator of resource 0x1800009 X connection to :0.0 broken (explicit kill or server shutdown). [1] + Exit 1 xclock -geometry +0+0 noon%
Weitere Informationen: Artikel "TTYs and X Windows - Unix User Interaction now and then. An Introduction of Concepts for Novice Users." http://www.onlamp.com/pub/a/onlamp/2001/03/22/tty.html
localmachine% xhost +remotemachine
localmachine% telnet remotemachinebzw.
localmachine% ssh -x remotemachine # kleines 'x'!
remotemachine% setenv DISPLAY localmachine:0.0
remotemachine% xclock
rfhinf103% cat /etc/X11/xdm/Xservers ... :0 local /usr/X11R6/bin/X -nolisten tcp -br vt7 ...Abhilfe schafft hier das Starten eines zweiten (lokalen) X-Servers (``X :1'') und Umlenken auf dessen Display (``setenv DISPLAY localmachine:1'').
Befehle: xauth list, xauth add. Voraussetzung: xdm o.ä. der Authority Cookies aufsetzt.
Lokal:
delphi% xauth list
delphi:0 MIT-MAGIC-COOKIE-1 a0501d1f869149e97e1f7f663dab4ac2
noon/unix:0 MIT-MAGIC-COOKIE-1 6d90befa47fc677d31da3712b244c9f5
...
Remote:
noon% setenv DISPLAY delphi:0
noon% setenv XAUTHORITY /tmp/xauth
noon% xauth list
xauth: creating new authority file /tmp/xauth
noon% xclock
Xlib: connection to ":0.0" refused by server
Xlib: Client is not authorized to connect to Server
Error: Can't open display: :0.0
noon% xauth add delphi:0 MIT-MAGIC-COOKIE-1 a0501d1f869149e97e1f7f663dab4ac2
xauth: creating new authority file /tmp/xauth
noon% xclock
^C
localmachine% ssh -X remotemachine xclock
Beispiel:
#!/bin/sh xclock & xterm -geometry +0-0 & xterm -geometry -0-0 & twm # hier kein "&" !
Aufgaben: Fensterdekoration, Fenster- und Icon-Verwaltung; Menüs und Button-Bars (Startleiste, ...) zum starten und anwählen von Programmen. Theme-fähige Desktop-Umgebungen (KDE, GNOME) können Fenster-Dekoration on the fly ändern.
Window Manager sind reine X-Clients!
local% X :1
local% xterm -display :1
NetBSD und Linux: Ctrl+Alt+F1 zusammen drücken
local% ssh -X darwin.fh-regensburg.de
Eine (schnellere) Alternative ist, DISPLAY auf dem entfernten Rechner so zu setzen dass die Ausgabe direkt auf den lokalen Rechner geschickt wird, und den Zugriff darauf via xhost oder xauth freizugeben. Dies benötigt TCP Zugang vom entfernten Rechner auf Port 6001 (Display 1) des lokalen Rechners:
local% xhost +darwin.fh-regensburg.de local% ssh darwin.fh-regensburg.de shell% setenv DISPLAY rfhinfXXX.fh-regensburg.de:1
shell% xclock -geometry -0+0 ^C
shell% vi `which startkde`
shell% krootimage /etc/opt/kde3/share/config/kdm/backgroundrc
# * Then ksmserver is started which in turn starts # 1) the window manager (kwin) # 2) everything in $KDEDIR/share/kde/autostart (kdesktop, kicker, etc.) # 3) the rest of the session.
shell% kwin &
shell% ls $HOME/.kde/share/kde/autostart ls: /home/feyrer/.kde/share/kde/autostart: No such file or directory shell% ls /opt/kde3/share/autostart SuSEgreeter.desktop konqy_preload.desktop irkick.desktop korgac.desktop kab2kabc.desktop kpowersave.desktop kalarm.tray.desktop ktip.desktop kalarmd.autostart.desktop oooqs.desktop kamix.desktop panel.desktop kbluetoothd.autostart.desktop profile_chooser.desktop kdesktop.desktop restore_kmix_volumes.desktop kgpg.desktop suseplugger.desktop khotkeys.desktop susewatcher.desktop klipper.desktop shell% grep -h ^Exec= /opt/kde3/share/autostart/* Exec=SuSEgreeter -caption "%c" %i %m Exec=irkick Exec=kab2kabc --disable-autostart --quiet Exec=kalarm --tray Exec=kalarmd --login Exec=kamix Exec=kbluetoothd --dontforceshow Exec=kdesktop Exec=kgpg %U Exec=khotkeys Exec=klipper Exec=konqueror --preload Exec=korgac --miniicon korganizer Exec=kpowersave Exec=ktip Exec=oooqs -caption "%c" %i %m Exec=kicker Exec=profile_chooser Exec=kmixctrl --restore Exec=suseplugger -caption "%c" %i %m --quiet Exec=susewatcher -caption "%c" %i %m --quiet
shell% kdesktop
shell% kicker