Сразу оговорюсь, я настраиваю Xorg руками и предпочитаю лёгкие оконные менеджеры. Я знаю, что большинство пользователей делает не так, но надеюсь, что и они найдут здесь что-нибудь полезное.
При настройке оконного интерфейса (оконного менеджера)
часто оказывается необходима
информация об окнах того или иного приложения. Получить её можно
двумя командами xwininfo
и xprop
.
При настройке обработки событий (клавиатура/мышь) очень
полезна бывает утилита xev
.
.Xresources
для древних систем. Тут используются
древние шрифты, восьмибитная кодировка… Но это работает всегда:
Xft.rgba: none
Xft.hinting: true
Xft.autohint: false
Xft.hintstyle: hintfull
Xft.antialias: true
Xft.dpi: 84
Rxvt*scrollBar: false
Rxvt*boldFont: -*-fixed-*-*-*-*-*-*-*-*-*-*-koi8-r
Rxvt*geometry: 80x30
Rxvt*visualBell: true
Rxvt*keysym.0xFF50: \e[H
Rxvt*keysym.0xFF57: \e[F
XTerm*font: -*-fixed-*-*-*-*-*-*-*-*-*-*-koi8-r
XTerm*font2: -*-fixed-*-*-*-*-6-*-*-*-*-*-koi8-*
XTerm*font3: -misc-fixed-medium-*-*-*-8-*-*-*-*-*-koi8-r
XTerm*font4: -misc-fixed-medium-*-*-*-10-*-*-*-*-*-koi8-r
XTerm*font5: -misc-fixed-medium-*-*-*-15-*-*-*-*-*-koi8-r
XTerm*font6: -sony_koi8_ru-fixed-medium-*-*-*-24-*-*-*-*-*-koi8-r
XTerm*color0: #000000
XTerm*color1: #9e1828
XTerm*color2: #aece92
XTerm*color3: #968a38
XTerm*color4: #414171
XTerm*color5: #963c59
XTerm*color6: #418179
XTerm*color7: #bebebe
XTerm*color8: #666666
XTerm*color9: #cf6171
XTerm*color10: #c5f779
XTerm*color11: #fff796
XTerm*color12: #4186be
XTerm*color13: #cf9ebe
XTerm*color14: #71bebe
XTerm*color15: #ffffff
XTerm*foreground: #bebebe
XTerm*background: #000000
XTerm*colorBDMode: true
XTerm*colorBD: #82cd00
XTerm*colorULMode: true
XTerm*colorUL: #d4cd00
XTerm*translations: #override \n\
~Ctrl<Btn3Up>: insert-selection(CLIPBOARD, CUT_BUFFER1) \n\
~Ctrl<Btn3Down>: ignore()
XTerm*locale: false
XTerm*allowC1Printable: true
XTerm*Background: #000000
XTerm*Foreground: #bebebe
XTerm*VisualBell: true
XClock*width: 60
XClock*height: 60
XClock*hourColor: #ffffff
XClock*minuteColor: #ffffff
XClock*secondColor: #ffffff
XClock*majorColor: #ffffff
XClock*minorColor: #696969
XClock*padding: 3
XClock*background: #121212
Более современная настройка. Работает с UTF-8, сглаженными
шрифтами и поддерживает изменение цветов налету. Последнюю
фичу я использую постоянно в таком ключе: залогинился на
другую систему — Alt-F5
(например) — подкрасили окошечко.
XTerm*faceName: "DejaVu Sans Mono:style=Book"
!XTerm*faceName: "Andale Mono"
XTerm*faceSize: 14
XTerm*faceSize1: 8
XTerm*faceSize2: 9
XTerm*faceSize3: 10
XTerm*faceSize4: 12
XTerm*faceSize5: 14
XTerm*faceSize6: 16
XTerm*color0: #000000
XTerm*color1: #9e1828
XTerm*color2: #aece92
XTerm*color3: #968a38
XTerm*color4: #414171
XTerm*color5: #963c59
XTerm*color6: #418179
XTerm*color7: #bebebe
XTerm*color8: #666666
XTerm*color9: #cf6171
XTerm*color10: #c5f779
XTerm*color11: #fff796
XTerm*color12: #4186be
XTerm*color13: #cf9ebe
XTerm*color14: #71bebe
XTerm*color15: #ffffff
!XTerm*colorAttrMode: true
! color 7 and 0
XTerm*foreground: #bebebe
XTerm*background: #000000
!XTerm*colorBDMode: true
!XTerm*colorBD: #82cd00
!XTerm*colorBL
!XTerm*colorRV
!XTerm*colorULMode: true
!XTerm*colorUL: #d4cd00
! на правой кнопке вставка из CLIPBOARD
*VT100*translations: #override \n\
~Ctrl<Btn3Up>: insert-selection(CLIPBOARD, CUT_BUFFER1) \n\
~Ctrl<Btn3Down>: ignore() \n\
Meta<Key>F1: interpret("\033]111\007") \
interpret("\033]112\007") \
interpret("\033]113\007") \
interpret("\033]114\007") \n\
Meta<Key>F2: interpret("\033]12;#ff0000\007") \
interpret("\033]13;#000000\007") \
interpret("\033]14;#ff0000\007") \n\
Meta<Key>F3: interpret("\033]12;#00ff00\007") \
interpret("\033]13;#000000\007") \
interpret("\033]14;#00ff00\007") \n\
Meta<Key>F4: interpret("\033]12;#ffff00\007") \
interpret("\033]13;#000000\007") \
interpret("\033]14;#ffff00\007") \n\
Meta<Key>F5: interpret("\033]11;#300000\007") \n\
Meta<Key>F6: interpret("\033]11;#003000\007") \n\
Meta<Key>F7: interpret("\033]11;#303000\007") \n\
Meta<Key>F11: smaller-vt-font() \n\
Meta<Key>F12: larger-vt-font()
XTerm*locale: false
!
XTerm*allowC1Printable: true
XTerm*Background: #000000
XTerm*Foreground: #bebebe
XTerm*VisualBell: true
vncviewer*grabKeyboard: true
vncviewer*encodings: tight
vncviewer*qualityLevel: 4
vncviewer*requestedDepth: 8
!Xft.rgba: none
!Xft.rgba: rgb
Xft.hinting: true
Xft.autohint: false
!Xft.hintstyle: hintslight
Xft.hintstyle: hintfull
Xft.antialias: true
Xft.dpi: 84
XFontSel*viewPort.sampleText.background: #000000
XFontSel*viewPort.sampleText.foreground: #cccccc
Для FVWM 2.6. Используется m4.
# fvwm -c 'FvwmM4 ~/.fvwm/.fvwm2rc-m4-2.6'
############################################ M4 MACRO
define(`MOD_KEY', `4')
define(`MMOD_KEY', `4M')
define(`CMOD_KEY', `4C')
define(`Window', `WTSF124680')
define(`WindowI', `WTSF124680I')
define(`WinRotCond', `(AcceptsFocus, CurrentPage, !Iconic, !Shaded, !FvwmPager)')
define(`jumpmap', `ifelse(`$#', `0', ,
`$#', `1', ,
`$#', `2', ,
`
Key `$3' A MOD_KEY GotoPage `$1' `$2'
Key `$3' A CMOD_KEY GotoPage `$1' `$2'
Key `$3' A MMOD_KEY MoveAndGoToPage `$1' `$2'
jumpmap(shift(shift(shift($@))))')')
define(`RenewFunc', `
DestroyFunc `$1'
AddToFunc `$1'')
define(`RenewMenu', `
DestroyMenu `$1'
AddToMenu `$1'')
############################################ Functions
# open_icon_library-full
ImagePath /home/a/.fvwm/i
# UTIL
RenewFunc(RIconify)
# + I Layer 0 2
+ I Iconify true
+ I Raise
RenewFunc(RDeIconify)
+ I Iconify false
# + I Layer 0 4
# + I All (CurrentPage, Iconic) PlaceAgain Icon
+ I Raise
# START
RenewFunc(StartFunction)
+ I Module FvwmBacker
# UTIL
RenewFunc(normalization_of_the_cursor_position)
+ I WarpToWindow -5px -5px
# OPERATION
RenewFunc(MoveAndGoToPage)
+ I Raise
+ I MoveToPage $0 $1
+ I GotoPage $0 $1
RenewFunc(MoveAndGoToPagePrev)
+ I Raise
+ I MoveToPage prev
+ I GotoPage prev
RenewFunc(RaiseLowerOrMove)
+ C RaiseLower
+ M Raise
+ M Move
RenewFunc(RaiseLowerOrResize)
+ C RaiseLower
+ M Resize
+ D Stick
RenewFunc(RaiseAndResizeOrIconify)
+ I Raise
+ C RIconify
+ M Resize
RenewFunc(RaiseAndMoveOrIconify)
+ I Raise
+ D RIconify
+ M Move
RenewFunc(RaiseAndStick)
+ I Raise
+ I Stick
RenewFunc(SelectWindow)
+ I Focus
+ I RDeIconify
+ I normalization_of_the_cursor_position
RenewFunc(SelectNextWindow)
+ I Next WinRotCond SelectWindow
RenewFunc(SelectPrevWindow)
+ I Prev WinRotCond SelectWindow
RenewFunc(DeIconifyOrMove)
+ I Raise
+ C RDeIconify
+ D RDeIconify
+ M Move
RenewFunc(MoveAndGo)
+ I Move $0 $1
+ I normalization_of_the_cursor_position
RenewFunc(MaximizeAndGo)
+ I Maximize $0 $1
+ I normalization_of_the_cursor_position
############################################ Menu
RenewMenu(RDesktop)
+ "my" Exec exec rdesktop # дописать своё
RenewMenu(Apps)
+ "Firefox" Exec exec firefox
+ "Chromium" Exec exec chromium
+ "GFtp" Exec exec gftp
+ "Thunderbird" Exec exec thunderbird
+ "Tkabber" Exec exec tkabber
+ "GIMP" Exec exec gimp
+ "" Nop
+ "Xfontsel" Exec exec xfontsel
#AddToMenu Browser
# + DynamicPopupAction PipeRead "fvwm-menu-directory -r -na Browser -d / -s"
#AddToFunc FuncFvwmMenuDirectory
# + I PipeRead "fvwm-menu-directory —command-title '' -d '$0'"
RenewMenu(Util)
+ "Utilities" Title
+ "Xterm" Exec exec xterm
+ "Root" Exec exec xterm -bg \#180000 -e sudo bash
+ "Apps" Popup Apps
+ "RDesktop" Popup RDesktop
+ "Xkill" Exec exec xkill
+ "`Window'" Popup Window-Ops
+ "" Nop
# + "My Browser" Menu Browser
# + MissingSubmenuFunction FuncFvwmMenuDirectory
# + "My Browser2" Popup /home
# + "" Nop
+ "Exit" Popup Quit-Verify
RenewMenu(Quit-Verify)
+ "Really Quit Fvwm?" Title
+ "No, Don't Quit" Nop
+ "Restart" Restart —dont-preserve-state
+ "" Nop
+ "Yes, Really Quit" Quit
RenewMenu(Window-Ops)
+ "Maximize" MaximizeAndGo 100 100
+ "Maximize vertical" MaximizeAndGo 0 100
+ "Maximize horizontal" MaximizeAndGo 100 0
+ "" Nop
+ "Iconify" RIconify
+ "Stick" RaiseAndStick
+ "" Nop
+ "StaysOnTop" Layer 0 6
+ "StaysPut" Layer 0 4
+ "StaysOnBottom" Layer 0 2
+ "" Nop
+ "WindowShade" WindowShade
+ "" Nop
+ "Close window" Close
+ "Destroy window" Destroy
############################################ Misc
DeskTopSize 12x3
EdgeResistance 10000
Style * EdgeMoveResistance 20
EdgeScroll 0 0 # do not scroll
Style * SnapAttraction 10 SameType
IgnoreModifiers L25 # ignore caps-lock num-lock scroll-lock
############################################ Window Title
# menu
ButtonStyle 1 Vector 5 \
40x60@0 40x40@1 60x40@1 60x60@0 40x60@0
# trash
ButtonStyle 2 Vector 7 \
20x20@0 80x20@1 80x30@0 \
65x80@0 35x80@0 \
20x30@1 20x20@1
# icon
ButtonStyle 4 Vector 4 \
50x75@0 80x25@0 20x25@1 50x75@1
# max
ButtonStyle 6 Vector 5 \
20x80@0 20x20@1 80x20@1 80x80@0 20x80@0
# stick
ButtonStyle 8 Vector 10 \
20x20@0 80x20@1 \
80x40@0 65x40@0 65x70@0 50x90@0 \
35x70@0 35x40@1 20x40@0 20x20@1
# resize
ButtonStyle 0 Vector 10 \
45x65@0 45x80@0 20x80@0 20x50@1 35x50@1 \
35x65@1 35x20@1 80x20@1 80x65@0 35x65@0
ButtonStyle 1 - Clear
ButtonStyle 2 - Clear
ButtonStyle 4 - Clear
ButtonStyle 6 - Clear MwmDecorMax
ButtonStyle 8 - Clear MwmDecorStick
ButtonStyle 0 - Clear
############################################ Mouse
Mouse 1 1 A Menu Window-Ops Nop
Mouse 1 2 MOD_KEY Destroy
Mouse 1 2 A Close
Mouse 1 4 A RIconify
Mouse 1 6 A MaximizeAndGo 100 100
Mouse 1 8 A RaiseAndStick
Mouse 1 0 A Resize
Mouse 1 T A RaiseAndMoveOrIconify
Mouse 2 T A Lower
Mouse 3 T A RaiseLowerOrResize
Mouse 4 T A WindowShade True # up
Mouse 5 T A WindowShade False # down
Mouse 1 R A Menu Util
Mouse 3 R A Menu Util
Mouse 2 R A Module FvwmPager -transient 0 0
Mouse 1 I A DeIconifyOrMove
Mouse 2 I A Stick
Mouse 3 I A Iconify off
Mouse 1 Window MOD_KEY RaiseLowerOrMove
Mouse 2 Window MOD_KEY Lower
Mouse 3 Window MOD_KEY RaiseAndResizeOrIconify
Mouse 3 Window MMOD_KEY StrokeFunc
Stroke 0 0 Window MMOD_KEY Move
Stroke N357 0 Window MMOD_KEY Move 0 0
Stroke N456 0 Window MMOD_KEY Move -0 w
Stroke N654 0 Window MMOD_KEY Move 0 w
Stroke N258 0 Window MMOD_KEY Move w 0
Stroke N852 0 Window MMOD_KEY Move w -0
Stroke N951 0 Window MMOD_KEY Move 0 -0
Stroke N159 0 Window MMOD_KEY Move -0 0
Stroke N753 0 Window MMOD_KEY Move -0 -0
############################################ Hot Keys
Key Up WindowI MOD_KEY Raise
Key Up R MOD_KEY SelectNextWindow
Key Down WindowI MOD_KEY Lower
Key Down R MOD_KEY SelectNextWindow
Key Right A MOD_KEY GotoPage +1p +0p
Key Left A MOD_KEY GotoPage -1p +0p
Key Up A CMOD_KEY GotoPage +0p -1p
Key Down A CMOD_KEY GotoPage +0p +1p
Key Right WindowI MMOD_KEY MoveAndGoToPage +1p +0p
Key Left WindowI MMOD_KEY MoveAndGoToPage -1p +0p
Key Up WindowI MMOD_KEY MoveAndGoToPage +0p -1p
Key Down WindowI MMOD_KEY MoveAndGoToPage +0p +1p
Key grave A MOD_KEY GotoPage prev
Key grave A MMOD_KEY MoveAndGoToPagePrev
Key End Window MOD_KEY MaximizeAndGo 100 100
Key Page_Up Window MOD_KEY MaximizeAndGo 0 100
Key Page_Down Window MOD_KEY MaximizeAndGo 100 0
Key Delete Window MOD_KEY RIconify
Key End R MOD_KEY SelectNextWindow
Key Page_Up R MOD_KEY SelectNextWindow
Key Page_Down R MOD_KEY SelectNextWindow
Key Delete R MOD_KEY SelectNextWindow
Key Home WindowI MOD_KEY RaiseAndStick
Key Escape WindowI MOD_KEY Close
Key Escape WindowI MMOD_KEY Destroy
Key Return A MOD_KEY Popup Util
Key Space A MMOD_KEY Exec xlock -mode swarm
Key Tab A MOD_KEY SelectNextWindow
Key BackSpace A MOD_KEY SelectPrevWindow
Key KP_Add A MOD_KEY SelectNextWindow
Key KP_Subtract A MOD_KEY SelectPrevWindow
Key KP_Home Window MOD_KEY MoveAndGo 0 0
Key KP_Up Window MOD_KEY MoveAndGo 50-50w 0
Key KP_Prior Window MOD_KEY MoveAndGo -0 0
Key KP_Left Window MOD_KEY MoveAndGo 0 50-50w
Key KP_Begin Window MOD_KEY MoveAndGo 50-50w 50-50w
Key KP_Right Window MOD_KEY MoveAndGo -0 50-50w
Key KP_End Window MOD_KEY MoveAndGo 0 -0
Key KP_Down Window MOD_KEY MoveAndGo 50-50w -0
Key KP_Next Window MOD_KEY MoveAndGo -0 -0
jumpmap(
0, 0, 1,
1, 0, 2,
2, 0, 3,
3, 0, 4,
4, 0, 5,
5, 0, 6,
6, 0, 7,
7, 0, 8,
8, 0, 9,
9, 0, 0,
10, 0, minus,
11, 0, equal,
0, 1, q,
1, 1, w,
2, 1, e,
3, 1, r,
4, 1, t,
5, 1, y,
6, 1, u,
7, 1, i,
8, 1, o,
9, 1, p,
10, 1, bracketleft,
11, 1, bracketright,
0, 2, a,
1, 2, s,
2, 2, d,
3, 2, f,
4, 2, g,
5, 2, h,
6, 2, j,
7, 2, k,
8, 2, l,
9, 2, semicolon,
10, 2, apostrophe,
11, 2, backslash)
Key F1 A MOD_KEY Exec amixer set Front,0 5%-,5%- unmute
Key F2 A MOD_KEY Exec amixer set Front,0 5%+,5%+ unmute
############################################
define(`COMMON_FONT', `"-*-helvetica-medium-r-*-*-14-*-*-*-*-*-koi8-*"')
define(`xstyle',`Style `$2' `$1'
ifelse($#,2,`',`xstyle(`$1',shift(shift($@)))')')
Colorset 0 fg #ff0000, bg #696969, hi #939393, sh #343434
Style * \
BorderWidth 0, \
HandleWidth 3, \
Font COMMON_FONT, \
MWMFunctions, \
MWMDecor, \
HintOverride, \
MWMBorder, \
MWMButtons, \
IconFont COMMON_FONT, \
IconBackgroundColorset 0, \
IconBox 400x400+200-0, \
IconFill Left Bottom, \
IconBackgroundRelief 2, \
IconBackgroundPadding 0, \
Icon cameramonitor.png, \
IconOverride
#, StickyIcon
# , IconBox 200x800-0+0, IconFill Right Top
xstyle(`IconBox 400x400+600-0, IconFill Right Bottom', xterm)
xstyle(`!Title', xterm, rxvt, xclock, pclock, display, FvwmPager, xmms)
xstyle(`BorderWidth 0, HandleWidth 0', xclock, display, FvwmPager, xmms)
xstyle(`Sticky', xclock, FvwmPager)
define(`seticons',`Style $1 Icon $2
ifelse($#,2,`',`seticons(shift(shift($@)))')')
seticons(
xterm, konsole.png,
mplauer, mplayer.png,
chromium, chromium-2.png,
firefox, firefox_alt.png,
Firefox, firefox_alt.png,
gimp, gimp-3.png,
gqview, graphics-2.png,
tkabber, internet-chat-2.png,
googleearth-bin, internet-web-browser-7.png,
xmms, juk-2.png,
Licq, licq-2.png,
Thunderbird, internet-mail-2.png
)
# xprop xwininfo
MenuStyle * Font COMMON_FONT
############################################
define(`WP_PATH', `/home/a/.fvwm/bg5')
define(`loop_row', `ifelse($#,3,`loop_row($1,$2,$3,0)',`dnl
Colorset $2 TiledPixmap WP_PATH/bg-$4-$3.xpm
*FvwmBacker: Command (Desk *, Page $3 $4) Colorset $2
ifelse(eval($4<$1),1,`loop_row($1,incr($2),$3,incr($4))')dnl
')')
define(`loop_line',`ifelse($#,2,`loop_line($1,$2,1,0)',`dnl
loop_row($2, eval(`($3-1)*($2+1)+1'), $4)dnl
ifelse(eval($4<$1),1,`loop_line($1,$2,incr($3),incr($4))')dnl
')')
loop_line(11, 2)
############################################
*FvwmPager: Geometry +0-0
*FvwmPager: DeskTopScale 128
*FvwmPager: Label * Pager
*FvwmPager: Font none
############################################
#*FvwmWharfColorset 0
#*FvwmWharfGeometry -0+0
#*FvwmWharf Clock nil MaxSwallow "pclock" xclock -geometry 64x64 -padding 0
#Style "FvwmWharf" BorderWidth 1,\
# NoTitle,\
# NoHandles,\
# Sticky,\
# ForeColor black,\
# BackColor rgb:1c/2/2,\
# FVWMBorder,\
# WindowListSkip
#Module FvwmWharf
############################################
# EOF
Утилита xcompmgr
является надстройкой над любым оконным
менеджером, которая добавляет композитности. Если вы
используете достаточно простой, лёгкий и быстрый (в том числе и в настройке)
оконный менеджер (я, например, такие очень люблю), но
хотите добавить в него рок-н-рола в виде теней, прозрачности
и прочих радостей, то xcompmgr
— это то, что вам надо.
Единственная проблема, которую я видел с этой утилитой, это ошибка вида:
error 143: BadPicture request 139 minor 8 serial 100383
В разных версиях строчка немного разная, но код 143 неизменен.
Проблема заключается в том, какой утилитой вы устанавливаете
фон. Приём display -window root background.png
— не подходит;
xloadimage
— тоже. Я ни разу не видел проблем с feh
:
feh --bg-scale background.png
Используйте её и проблемы пропадут.
Чтобы увидеть эффекты, обязательно указывайте ключ -c
:
xcompmgr -c
Вызовы feh
и xcompmgr
можно разместить раз и навсегда в .xinitrc
.
Более развёрнутый пример:
xcompmgr -c -r 9 -l -12 -t -12 -c .5 -f -I .2 -O .2 -D 20 -F
Здесь мы задали параметры тени (сделали её поменьше размером,
но более отчётливой) и ускорили эффекты плавного появления
и пропадания окон (красота — это прекрасно, но замедлять работу
не надо). Опция -F
нужна только если вы используете утилиту
transset
, работа которой становится плавной.
transset
Утилита transset
позволяет управлять прозрачностью окна.
Сейчас появилась и набрала популярность более «продвинутая»
утилита transset-df
с расширенной функциональностью. Советую
использовать её.
Чтобы посмотреть, как она работает, просто запустите её без параметров и укажите мышкой любое окно. Оно станет полупрозрачным. Повторите — окно вернётся в прежнее состояние.
Но больше пользы от этой утилиты можно получить, если настроить её запуск из оконного менеджера.
Например, моём любимом FVWM, я повесил её на знаки «больше»/«меньше». Теперь они уменьшают и увеличивают прозрачность:
Key comma WTSF12346I MOD1 Exec exec transset-df --actual --dec .1 --min .4
Key period WTSF12346I MOD1 Exec exec transset-df --actual --inc .1
Честно, сказать, пользуюсь этим не часто. Но иногда удобно видеть,
что под текущим окном в tail -f serve.log
произошло движение.