Xdefaults
Vorlage:I18n links start Vorlage:I18n entry Vorlage:I18n entry Vorlage:I18n links end
Einleitung
Xdefaults ist eine versteckte Datei auf Benutzerebene, die sich üblicherweise in ~/.Xdefaults befindet. Wenn sie existiert wird sie vom xrdb (X Resource Database) Programm automatisch, wenn Xorg gestartet wird, analysiert. Sie kann benutzt werden um Einstellungen für X und X Anwendungen zu setzen oder zu überschreiben. Sie kann vieles, u.a.:
- Terminal Farben definieren
- Terminal Einstellungen konfigurieren
- DPI, Antialiasing, Hinting und ander X Schrift Einstellungen definieren
- Das Xcursor-Motiv setzen
- Xscreensaver-Motiv setzen
- Die Einstellungen für Tief-Level X Anwendungen (xclock, xpdf etc.) setzen
Erste Schritte
.Xdefaults erstellen
Die Datei ~/.Xdefaults existiert nicht von Anfang an. Um sie zu erstellen muss man das Terminal öffnen und das Folgende als normaler Benutzer tippen:
$ touch ~/.Xdefaults
Die leere Textdatei kann man nun mit dem Text Editor der Wahl editieren.
Voreinstellungen
Um die Voreinstellungen für die installierten X11 Anwendungen zu sehen kann man in /usr/share/X11/app-defaults/ reinschauen.
Xdefaults Syntax
Die grundlegende Syntax
Die grundlegende Syntax von einer Xdefaults Datei ist folgende:
name.Class.resource: value
...und ein Beispiel aus der echten Welt:
xscreensaver.Dialog.headingFont: -*-fixed-bold-r-*-*-*-100-*-*-*-*-iso8859-1
name: Der Name der Anwendung, z.b. xterm, xpdf, etc.
class: Die Klassifikation um Ressourcen zusammen zu gruppieren. Klassifikationen sind normalerweise grossgeschrieben.
resource: Der Name von der Ressource, deren Wert geändert wird. Ressourcen sind normalerweise kleingeschrieben mit grossgeschriebenen Verkettungen.
value: Der Wert der Ressource. Das ist eines von dreien:
- Ganze Zahl
- Wahr oder Falsch (true/false, yes/no, on/off)
- String (zum Beispiel das Wort (white), die Farbe (#ffffff), oder ein Pfad (/usr/bin/firefox))
delimiters: Eine Periode (.) wird benutzt um jeden Schritt welchen man die Hierarchie runter geht anzudeuten -- im oberen Beispiel haben wir mit name gestartet, sind dann weiter runter in class und schlussendlich in die resource selbst gelangt. Ein Doppelpunkt hält die Deklaration der Ressource vom eigentlichen Wert auseinander.
Wildcard matching
Sternchen können als Wildcard benutzt werden, um es einfacher zu machen eine Regel für verschiedene Anwendungen oder Elemente gelten zu lassen.
Mit dem vorherigen Beispiel, wenn man die gleiche Schrift für alle Programme (nicht nur xscreensaver), die einen class name Dialog mit einem resource name headingFont enthalten, haben will, dann würde man schreiben:
*Dialog.headingFont: -*-fixed-bold-r-*-*-*-100-*-*-*-*-iso8859-1
Wenn man die gleiche Regeln für alle Programme, welche die Resource headingFond unabhängig von Klasse anwenden will, dann würde man schreiben:
*headingFont: -*-fixed-bold-r-*-*-*-100-*-*-*-*-iso8859-1
Auskommentieren
Um einen Kommentar in eine Xdefaults Datei einzufürgen muss man ihn einfach mit einem (!) am Anfang versehen, z.B.:
! Das ist ein Kommentar über irgendwelche Xft Einstellungen xft.dpi: 96 ! Das ist ein Kommentar in der Linie
! Die folgende Regel wird nicht beachtet werden, da sie auskommentiert ist: !xft.antialias: true
Sample usage
The following samples should provide a good understanding of how application settings can be modified using an Xdefaults file. For full details, refer to the man page of the application in question.
File header
If desired, you can add a header to ~/.Xdefaults which not only explains the file's contents, but also instruct vim how to perform syntax highlighting and other formatting. For example:
! ---------------------------------------------------------------------------- ! file: ~/.Xdefaults ! author: Thayer Williams - http://cinderwick.ca ! modified: November 2008 ! vim:enc=utf-8:nu:ai:si:et:ts=4:sw=4:ft=xdefaults: ! ----------------------------------------------------------------------------
This will instruct vim to use UTF-8 encoding, display line numbers, auto-indent, smart-indent, expand tabs to spaces, set tabs to equal 4 spaces, and set the autocommand Filetype to "xdefaults".
It's a good habit to get into, especially if you'd like to make your dotfiles available for public consumption.
Terminal colors
Most terminals, including xterm and uxrvt, support at least 16 basic colors. The following is an example of a 16-color scheme.
The colors 0-7 are the 'normal' colors, while colors 8-15 are their 'bright' counterparts (used for highlighting, etc.)
! terminal colors ------------------------------------------------------------ ! tangoesque scheme *background: #111111 *foreground: #babdb6 ! Black (not tango) + DarkGrey *color0: #000000 *color8: #555753 ! DarkRed + Red *color1: #ff6565 *color9: #ff8d8d ! DarkGreen + Green *color2: #93d44f *color10: #c8e7a8 ! DarkYellow + Yellow *color3: #eab93d *color11: #ffc123 ! DarkBlue + Blue *color4: #204a87 *color12: #3465a4 ! DarkMangenta + Mangenta *color5: #ce5c00 *color13: #f57900 !DarkCyan + Cyan (both not tango) *color6: #89b6e2 *color14: #46a4ff ! LightGrey + White *color7: #cccccc *color15: #ffffff
For more examples of color schemes, see the Other Resources section at the bottom of this article.
Desktop preferences
Xcursor settings
Set the theme and size of your mouse cursor:
! Xcursor -------------------------------------------------------------------- Xcursor*theme: Vanilla-DMZ-AA Xcursor.size: 22
Available themes reside in /usr/share/icons and local themes can be installed to ~/.icons
Xft Font Settings
You can define basic font settings without the need of a fonts.conf file or Desktop Environment. Note however, the use of a desktop environment and/or fonts.conf can override these settings. Your best option is to use one or the other, but not both.
! Xft settings --------------------------------------------------------------- Xft.dpi: 96 Xft.antialias: true Xft.rgba: rgb Xft.hinting: true Xft.hintstyle: hintslight
xterm preferences
This will open Xterm in an 80x25 character window with a scroll-bar and scroll capability for the last 512 lines.
The specified Terminus facename is a popular and clean terminal font.
! xterm ---------------------------------------------------------------------- xterm*geometry: 80x25 xterm*faceName: terminusbold:pixelsize=14 !xterm*font: -*-dina-medium-r-*-*-16-*-*-*-*-*-*-* xterm*dynamicColors: true xterm*utf8: 2 xterm*eightBitInput: true xterm*saveLines: 512 xterm*scrollTtyKeypress: true xterm*scrollTtyOutput: false xterm*scrollBar: true xterm*rightScrollBar: true xterm*loginShell: true xterm*jumpScroll: true xterm*multiScroll: true xterm*toolBar: false
urxvt preferences
Rxvt-unicode features an extensive list of options which can be configured via Xdefaults. Refer to the urxvt man page for details.
! rxvt-unicode --------------------------------------------------------------- ! font preference urxvt*font: -*-terminus-*-*-*-*-*-*-*-*-*-*-*-* urxvt*boldFont: -*-terminus-*-*-*-*-*-*-*-*-*-*-*-* !initial size urxvt*geometry: 120x35 !internal whitespace urxvt*internalBorder: 5 !fade text n% upon unfocus urxvt*fading: 20 !darken=(0 to 100) lighten=(-1 to -100) urxvt*shading: 30 !tint background with this color urxvt*tintColor: black !set to 32-bit for real transparency (compositing required) !urxvt*depth: 24 !save n lines of scrollback buffer urxvt*saveLines: 32767 !flash screen for attention urxvt*visualBell: true !jump to bottom (prompt) on keypress urxvt*scrollTtyKeypress: true !jump to bottom (prompt) when tty gets new lines urxvt*scrollWithBuffer: false !jump to bottom (prompt) on tty output urxvt*scrollTtyOutput: false !toggle scrollbar urxvt*scrollBar: false !scrollbar styles: rxvt, plain, next or xterm urxvt*scrollstyle: plain !scrollbar alignment urxvt*scrollBar_right: true urxvt*scrollColor: #777777 urxvt*cursorColor: #ffcc00 !is this a login shell? urxvt*loginShell: true !set the TERM environment variable urxvt*termName: rxvt-unicode !enable pseudo-transparency (requires depth: 24 (see above)) urxvt*inheritPixmap: true !delimiters for double-click mouse selection urxvt*cutchars: "()*,<>[]{}|' !screen dump settings urxvt*print-pipe: cat > $(echo urxvt.dump.$(date +'%Y%M%d%H%m%S')) !secondary screen scroll (default enabled) urxvt*secondaryScroll: true !de-iconify (map) on receipt of a bell character urxvt*mapAlert: true !inhibit writing record into the system log file utmp urxvt*utmpInhibit: true !! BEGIN urlLauncher settings !! urxvt*perl-lib: /usr/lib/urxvt/perl/ urxvt*perl-ext-common: default,matcher urxvt*urlLauncher: /usr/bin/firefox urxvt*matcher.button: 1 !! END urlLauncher settings !! !transparent=0000 opaque=ffff urxvt*background: rgba:1111/1111/1111/dddd
aterm preferences
Sample settings for aterm (very similar to urxvt)
!aterm settings------------------------------------------------------------- aterm*background: black aterm*foreground: white aterm*transparent: true aterm*shading: 30 aterm*cursorColor: gray aterm*saveLines: 2000 !aterm*tinting: gray aterm*scrollBar: false !aterm*scrollBar_right: true aterm*transpscrollbar: true aterm*borderwidth: 0 aterm*font: -*-terminus-*-*-*-*-*-*-*-*-*-*-*-* aterm*geometry: 80x25 !aterm*fading: 70
xpdf preferences
Some basic settings for Xpdf, a lightweight PDF viewer:
! xpdf ----------------------------------------------------------------------- xpdf*enableFreetype: yes xpdf*antialias: yes xpdf*foreground: black xpdf*background: white xpdf*urlCommand: /usr/bin/firefox %s
Anything more detailed than the above you should be putting in ~/.xpdfrc instead. See xpdf man page for more info. Note: viKeys is deprecated.
lal clock
! lal clock ------------------------------------------------------------------ lal*font: Arial lal*fontsize: 12 lal*bold: true lal*color: #ffffff lal*width: 150 lal*format: %a %b %d %l:%M%P
xclock preferences
Some basic xclock settings. See xclock man page for all X resources.
! xclock --------------------------------------------------------------------- xclock*update: 1 xclock*analog: false xclock*Foreground: white xclock*background: black
x11-ssh-askpass
! x11-ssh-askpass ------------------------------------------------------------ x11-ssh-askpass*font: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-* x11-ssh-askpass*background: #000000 x11-ssh-askpass*foreground: #ffffff x11-ssh-askpass.Button*background: #000000 x11-ssh-askpass.Indicator*foreground: #ff9900 x11-ssh-askpass.Indicator*background: #090909 x11-ssh-askpass*topShadowColor: #000000 x11-ssh-askpass*bottomShadowColor: #000000 x11-ssh-askpass.*borderWidth: 1
xscreensaver theming
A sample Xscreensaver theme. For more information, refer to the xscreensaver man page. View the resulting theme.
! xscreensaver --------------------------------------------------------------- !font settings xscreensaver.Dialog.headingFont: -*-dina-bold-r-*-*-12-*-*-*-*-*-*-* xscreensaver.Dialog.bodyFont: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-* xscreensaver.Dialog.labelFont: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-* xscreensaver.Dialog.unameFont: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-* xscreensaver.Dialog.buttonFont: -*-dina-bold-r-*-*-12-*-*-*-*-*-*-* xscreensaver.Dialog.dateFont: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-* xscreensaver.passwd.passwdFont: -*-dina-bold-r-*-*-12-*-*-*-*-*-*-* !general dialog box (affects main hostname, username, password text) xscreensaver.Dialog.foreground: #ffffff xscreensaver.Dialog.background: #111111 xscreensaver.Dialog.topShadowColor: #111111 xscreensaver.Dialog.bottomShadowColor: #111111 xscreensaver.Dialog.Button.foreground: #666666 xscreensaver.Dialog.Button.background: #ffffff !username/password input box and date text colour xscreensaver.Dialog.text.foreground: #666666 xscreensaver.Dialog.text.background: #ffffff xscreensaver.Dialog.internalBorderWidth:24 xscreensaver.Dialog.borderWidth: 20 xscreensaver.Dialog.shadowThickness: 2 !timeout bar (background is actually determined by Dialog.text.background) xscreensaver.passwd.thermometer.foreground: #ff0000 xscreensaver.passwd.thermometer.background: #000000 xscreensaver.passwd.thermometer.width: 8 !datestamp format--see the strftime(3) manual page for details xscreensaver.dateFormat: %I:%M%P %a %b %d, %Y
xcalc preferences
Some xcalc settings to colorize and customize buttons.
!xcalc----------------------------------------------------------------------- xcalc*geometry: 200x275 xcalc.ti.bevel.background: #111111 xcalc.ti.bevel.screen.background: #000000 xcalc.ti.bevel.screen.DEG.background: #000000 xcalc.ti.bevel.screen.DEG.foreground: LightSeaGreen xcalc.ti.bevel.screen.GRAD.background: #000000 xcalc.ti.bevel.screen.GRAD.foreground: LightSeaGreen xcalc.ti.bevel.screen.RAD.background: #000000 xcalc.ti.bevel.screen.RAD.foreground: LightSeaGreen xcalc.ti.bevel.screen.INV.background: #000000 xcalc.ti.bevel.screen.INV.foreground: Red xcalc.ti.bevel.screen.LCD.background: #000000 xcalc.ti.bevel.screen.LCD.foreground: LightSeaGreen xcalc.ti.bevel.screen.LCD.shadowWidth: 0 xcalc.ti.bevel.screen.M.background: #000000 xcalc.ti.bevel.screen.M.foreground: LightSeaGreen xcalc.ti.bevel.screen.P.background: #000000 xcalc.ti.bevel.screen.P.foreground: Yellow xcalc.ti.Command.foreground: White xcalc.ti.Command.background: #777777 xcalc.ti.button5.background: Orange3 xcalc.ti.button19.background: #611161 xcalc.ti.button18.background: #611161 xcalc.ti.button20.background: #611111 !uncomment to change label on division button !xcalc.ti.button20.label: / xcalc.ti.button25.background: #722222 xcalc.ti.button30.background: #833333 xcalc.ti.button35.background: #944444 xcalc.ti.button40.background: #a55555 xcalc.ti.button22.background: #222262 xcalc.ti.button23.background: #222262 xcalc.ti.button24.background: #222272 xcalc.ti.button27.background: #333373 xcalc.ti.button28.background: #333373 xcalc.ti.button29.background: #333373 xcalc.ti.button32.background: #444484 xcalc.ti.button33.background: #444484 xcalc.ti.button34.background: #444484 xcalc.ti.button37.background: #555595 xcalc.ti.button38.background: #555595 xcalc.ti.button39.background: #555595 XCalc*Cursor: hand2 XCalc*ShapeStyle: rectangle
Color Scheme Scripts
Any of the following scripts will display a chart of your current terminal color scheme. Handy for testing and whatnot.
Script #1
#!/bin/bash # # This file echoes a bunch of color codes to the # terminal to demonstrate what's available. Each # line is the color code of one forground color, # out of 17 (default + 16 escapes), followed by a # test use of that color on all nine background # colors (default + 8 escapes). # T='gYw' # The test text echo -e "\n 40m 41m 42m 43m\ 44m 45m 46m 47m"; for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \ '1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \ ' 36m' '1;36m' ' 37m' '1;37m'; do FG=${FGs// /} echo -en " $FGs \033[$FG $T " for BG in 40m 41m 42m 43m 44m 45m 46m 47m; do echo -en "$EINS \033[$FG\033[$BG $T \033[0m"; done echo; done echo
Script #2
#!/bin/bash # Original: http://frexx.de/xterm-256-notes/ # http://frexx.de/xterm-256-notes/data/colortable16.sh # Modified by Aaron Griffin # and further by Kazuo Teramoto FGNAMES=(' black ' ' red ' ' green ' ' yellow' ' blue ' 'magenta' ' cyan ' ' white ') BGNAMES=('DFT' 'BLK' 'RED' 'GRN' 'YEL' 'BLU' 'MAG' 'CYN' 'WHT') echo " ┌──────────────────────────────────────────────────────────────────────────┐" for b in $(seq 0 8); do if [ "$b" -gt 0 ]; then bg=$(($b+39)) fi echo -en "\033[0m ${BGNAMES[$b]} │ " for f in $(seq 0 7); do echo -en "\033[${bg}m\033[$(($f+30))m ${FGNAMES[$f]} " done echo -en "\033[0m │" echo -en "\033[0m\n\033[0m │ " for f in $(seq 0 7); do echo -en "\033[${bg}m\033[1;$(($f+30))m ${FGNAMES[$f]} " done echo -en "\033[0m │" echo -e "\033[0m" if [ "$b" -lt 8 ]; then echo " ├──────────────────────────────────────────────────────────────────────────┤" fi done echo " └──────────────────────────────────────────────────────────────────────────┘"
Script #3
#!/bin/bash # Original: http://frexx.de/xterm-256-notes/ # http://frexx.de/xterm-256-notes/data/colortable16.sh # Modified by Aaron Griffin # and further by Kazuo Teramoto FGNAMES=(' black ' ' red ' ' green ' ' yellow' ' blue ' 'magenta' ' cyan ' ' white ') BGNAMES=('DFT' 'BLK' 'RED' 'GRN' 'YEL' 'BLU' 'MAG' 'CYN' 'WHT') echo " ----------------------------------------------------------------------------" for b in $(seq 0 8); do if [ "$b" -gt 0 ]; then bg=$(($b+39)) fi echo -en "\033[0m ${BGNAMES[$b]} : " for f in $(seq 0 7); do echo -en "\033[${bg}m\033[$(($f+30))m ${FGNAMES[$f]} " done echo -en "\033[0m :" echo -en "\033[0m\n\033[0m : " for f in $(seq 0 7); do echo -en "\033[${bg}m\033[1;$(($f+30))m ${FGNAMES[$f]} " done echo -en "\033[0m :" echo -e "\033[0m" if [ "$b" -lt 8 ]; then echo " ----------------------------------------------------------------------------" fi done echo " ----------------------------------------------------------------------------"
Contributed .Xdefaults
Check out these links for some real world examples of Xdefaults, contributed by fellow community members:
http://dotfiles.org/~buttons/.Xdefaults
http://code.suckless.org/hg/dextra/file/513faba2591f/dolby/Xdefaults
http://github.com/stxza/arch-linux-configs/tree/master/.Xdefaults
http://dotfiles.org/~wraith/.Xdefaults
http://dotfiles.org/~tdy/.Xdefaults
http://github.com/jelly/dotfiles/tree/master/.Xdefaults
Other Resources
- Terminal Color Schemes- a gallery of terminal color schemes by our very own Aaron Griffin
- TIP Linux Colors in Aterm/rxvt - Gentoo wiki article with loads of information
- Using the Xdefaults File - An in-depth article on how X interprets the Xdefaults file
- Rxvt-unicode Configuration Tutorial - lots of information for urxvt users
- Available Colors and their names - listing of available colors and their color names for xterm and other X-applications.