Xdefaults

Aus wiki.archlinux.de
Version vom 5. November 2009, 16:46 Uhr von *>Duerrer (translated getting started)

Vorlage:I18n links start Vorlage:I18n entry Vorlage:I18n entry Vorlage:I18n links end

Vorlage:Translateme

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