X resources

From ArchWiki
Revision as of 15:15, 13 June 2010 by Thayer (Talk | contribs) (i18n template update)

Jump to: navigation, search

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

Xdefaults is a user-level configuration dotfile, typically located at Template:Filename. When present, it is parsed by the Template:Codeline (Xorg resource database) program automatically when Xorg is started, and can be used to set or override preferences for X and X applications. It can do many operations, including:

  • defining terminal colours
  • configuring terminal preferences
  • setting DPI, antialiasing, hinting and other X font settings
  • changing the Xcursor theme
  • theming xscreensaver
  • altering preferences on low-level X applications (xclock, xpdf, etc.)

Getting started

Creating .Xdefaults

The file Template:Filename does not exist by default. To create it, open a terminal and type the following as a normal user:

$ touch ~/.Xdefaults

Being a plain-text file, you can edit your Template:Filename file with the text editor of your choice.

Default settings

To see the default settings for your installed X11 apps, look in Template:Filename.

Xdefaults syntax

The basic syntax

The syntax of an Xdefaults file is as follows:

name.Class.resource: value

and here is a real world example:

xscreensaver.Dialog.headingFont: -*-fixed-bold-r-*-*-*-100-*-*-*-*-iso8859-1
name
The name of the application, such xterm, xpdf, etc
class
The classification used to group resources together. Class names are typically uppercase.
resource
The name of the resource whose value is to be changed. Resources are typically lowercase with uppercase concatenation.
value
The actual value of the resource. This can be 1 of 3 types:
  • Integer (whole numbers)
  • Boolean (true/false, yes/no, on/off)
  • String (a string of characters) (for example a word (white), a color (#ffffff), or a path (/usr/bin/firefox))
delimiters
A period (.) is used to signify each step down into the hierarchy -- in the above example we start at name, then descend into Class, and finally into the resource itself. A colon (:) is used to separate the resource declaration from the actual value.

Wildcard matching

The asterisk can be used as a wildcard, making it easy to write a single rule that can be applied to many different applications or elements.

Using the previous example, if you want to apply the same font to all programs (not just xscreensaver) that contain the class name Dialog which contains the resource name headingFont, you would write:

*Dialog.headingFont:     -*-fixed-bold-r-*-*-*-100-*-*-*-*-iso8859-1

If you want to apply this same rule to all programs that contain the resource headingFont regardless of its class, you would write:

*headingFont:    -*-fixed-bold-r-*-*-*-100-*-*-*-*-iso8859-1

Commenting

To add a comment to your Xdefaults file, simply prefix it with an exclamation point (!), for example:

! This is a comment placed above some Xft settings
xft.dpi:       96      ! this is an inline comment
! The following rule will be ignored because it has been commented out
!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 Template:Filename 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 is 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 urxvt, 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 #More 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 Template:Filename and local themes can be installed to Template:Filename.

Xft Font Settings

You can define basic font settings without the need of a Template:Filename file or Desktop Environment. Note however, the use of a desktop environment and/or Template:Filename 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*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
!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 Template:Filename instead. See Template:Codeline man page for more information. 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 {0..8}; do
  ((b>0)) && bg=$((b+39))

  echo -en "\033[0m ${BGNAMES[b]} │ "
  
  for f in {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 {0..7}; do
    echo -en "\033[${bg}m\033[1;$((f+30))m ${FGNAMES[f]} "
  done

  echo -en "\033[0m │"
  echo -e "\033[0m"

  ((b<8)) &&
  echo "     ├──────────────────────────────────────────────────────────────────────────┤"
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 "     ----------------------------------------------------------------------------"

Script #4

#!/usr/bin/env lua

local function cl(e)
    return ('\27[%sm'):format(e)
end

local function print_fg(bg, pre)
    for fg = 30,37 do
        fg = pre..fg
        io.write(cl(bg), cl(fg), (' %6s '):format(fg), cl(0))
    end
end

for bg = 40,47 do
    io.write(cl(0), ' ', bg, ' ')
    print_fg(bg, '')
    io.write('\n    ')
    print_fg(bg, '1;')
    print('\n')
end

-- Andres P

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

More resources