Personnaliser le bureau CTWM pour nous autres, Français

Introduction

Lorsque vous procédez à l'installation 'Complete' de NetBSD (avec X11), vous obtenez un environnement de bureau : CTWM.

Il fait un peu vieillot à première vue... sauf qu'en réalité, il est hyper personnalisable !
Je n'utilise plus les autres depuis j'ai appris à m'en servir.

2 configurations sont possibles :

Le fichier de configuration utilisé par défaut lorsque CTWM se lance est ici : /etc/X11/ctwm/system.ctwmrc

Pour configurer un environnement CTWM différent d'un utilisateur à l'autre, il faut rédiger un fichier ~/.ctwmrc (dans le répertoire de base de chaque utilisateur).
En gros, vous copiez le fichier par défaut depuis /etc/X11/ctwm/ vers votre espace personnel en le renommant puis vous modifiez votre propre configuration.

Ici, je préfère utiliser la même configuration pour tous les utilisateurs (puisqu'il n'y a que marcel, comme toujours), donc je vais toucher directement au fichier par défaut.


Préparation

On se met en root :

su -

D'abord, on en fait une copie par sécurité :

cp /etc/X11/ctwm/system.ctwmrc /etc/X11/ctwm/system.ctwmrc.BAK

Raccourcis clavier personnalisés

Voici un fichier de configuration d'exemple modifié, avec le nom des menus en Français, ainsi que quelques raccourcis claviers personnalisés :

(Ah au fait, je n'ai pas trouvé comment afficher les caractères accentués.. ça n'a pas fonctionné chez moi.. Si quelqu'un sait, je suis preneur.)


Fichier de configuration system.ctwmrc

#
# $NetBSD: system.ctwmrc,v 1.19 2022/05/27 17:04:16 nia Exp $
#
# ctwmrc by nia
#
# An attempt to strike a usability balance that makes keys and buttons
# do the thing users of various operating systems expect them to do.
#
# Most things should be possible to accomplish with only the keyboard.
#
# Also, mostly inoffensive colours (avoiding potentially inaccessible
# combinations like red-green).
#

# -*- coding: utf-8 -*-


# don't use the default buttons or key bindings, we define our own
NoDefaults

DontShowWelcomeWindow

ShowWorkSpaceManager
ShowIconManager

# 3D icon managers do not seemingly honor IconManagerHighlight,
# which makes them slightly less useful
#UseThreeDIconManagers
#UseThreeDWMap
UseThreeDBorders
#UseThreeDMenus
UseThreeDTitles

esyscmd(`printf 'define(fontsize, %d)\n' '$(/usr/X11R7/libexec/ctwm_font_size)''`)

ifelse(fontsize, `64', `
TitleFont '-*-spleen-*-*-*-*-64-*-*-*-*-*-*-*'
MenuFont '-*-spleen-*-*-*-*-64-*-*-*-*-*-*-*'
IconManagerFont '-*-spleen-*-*-*-*-64-*-*-*-*-*-*-*'
IconFont '-*-spleen-*-*-*-*-64-*-*-*-*-*-*-*'
ResizeFont '-*-spleen-*-*-*-*-64-*-*-*-*-*-*-*'
WorkSpaceFont '-*-spleen-*-*-*-*-32-*-*-*-*-*-*-*'
WorkSpaceManagerGeometry '240x960-4-4' 1
IconManagerGeometry '800x-1-1+0' 1
ThreeDBorderWidth 12
BorderWidth 12
define(setsizes, `yes')
')

ifelse(fontsize, `32', `
TitleFont '-*-spleen-*-*-*-*-32-*-*-*-*-*-*-*'
MenuFont '-*-spleen-*-*-*-*-32-*-*-*-*-*-*-*'
IconManagerFont '-*-spleen-*-*-*-*-32-*-*-*-*-*-*-*'
IconFont '-*-spleen-*-*-*-*-32-*-*-*-*-*-*-*'
ResizeFont '-*-spleen-*-*-*-*-32-*-*-*-*-*-*-*'
WorkSpaceFont '-*-spleen-*-*-*-*-24-*-*-*-*-*-*-*'
WorkSpaceManagerGeometry '120x480-4-4' 1
IconManagerGeometry '400x-1-1+0' 1
ThreeDBorderWidth 6
BorderWidth 6
define(setsizes, `yes')
')

ifelse(fontsize, `24', `
TitleFont '-*-spleen-*-*-*-*-24-*-*-*-*-*-*-*'
MenuFont '-*-spleen-*-*-*-*-24-*-*-*-*-*-*-*'
IconManagerFont '-*-spleen-*-*-*-*-24-*-*-*-*-*-*-*'
IconFont '-*-spleen-*-*-*-*-24-*-*-*-*-*-*-*'
ResizeFont '-*-spleen-*-*-*-*-24-*-*-*-*-*-*-*'
WorkSpaceFont '-*-spleen-*-*-*-*-16-*-*-*-*-*-*-*'
WorkSpaceManagerGeometry '90x360-4-4' 1
IconManagerGeometry '300x-1-1+0' 1
ThreeDBorderWidth 4
BorderWidth 4
define(setsizes, `yes')
')

ifelse(fontsize, `12', `
TitleFont '-*-spleen-*-*-*-*-12-*-*-*-*-*-*-*'
MenuFont '-*-spleen-*-*-*-*-12-*-*-*-*-*-*-*'
IconManagerFont '-*-spleen-*-*-*-*-12-*-*-*-*-*-*-*'
IconFont '-*-spleen-*-*-*-*-12-*-*-*-*-*-*-*'
ResizeFont '-*-spleen-*-*-*-*-12-*-*-*-*-*-*-*'
WorkSpaceFont '-*-spleen-*-*-*-*-8-*-*-*-*-*-*-*'
WorkSpaceManagerGeometry '45x180-4-4' 1
IconManagerGeometry '150x-1-1+0' 1
ThreeDBorderWidth 1
BorderWidth 1
define(setsizes, `yes')
')

# Fallback in case a valid font size was not returned.
# 'Default case' is 16px.

ifdef(`setsizes', `', `
TitleFont '-*-spleen-*-*-*-*-16-*-*-*-*-*-*-*'
MenuFont '-*-spleen-*-*-*-*-16-*-*-*-*-*-*-*'
IconManagerFont '-*-spleen-*-*-*-*-16-*-*-*-*-*-*-*'
IconFont '-*-spleen-*-*-*-*-16-*-*-*-*-*-*-*'
ResizeFont '-*-spleen-*-*-*-*-16-*-*-*-*-*-*-*'
WorkSpaceFont '-*-spleen-*-*-*-*-12-*-*-*-*-*-*-*'
WorkSpaceManagerGeometry '60x240-4-4' 1
IconManagerGeometry '200x-1-1+0' 1
ThreeDBorderWidth 3
BorderWidth 3
')

RestartPreviousState

DecorateTransients

# allow the user to have their root window recolored as they choose
DontPaintRootWindow

# hide window contents while altering windows for performance
NoOpaqueMove
NoOpaqueResize

AutoOccupy
AutoRelativeResize

CenterFeedbackWindow

NoGrabServer

RaiseOnClick

DontMoveOff
MoveOffResistance 150

ConstrainedMoveTime 0

IgnoreLockModifier

# Not actually that random.
# Means that windows do not have to be placed by hand with a mouse,
# which helps if you are using a keyboard only.
RandomPlacement 'on'

MoveDelta 3
ClearShadowContrast 40
DarkShadowContrast 60
MovePackResistance 100

RaiseWhenAutoUnSqueeze
ShortAllWindowsMenus

#BeNiceToColorMap

NoStackMode

StayUpMenus
WarpToDefaultMenuEntry
MenuShadowDepth 1

# warp through all windows in the current workspace
WindowRing
WarpRingOnScreen

NoTitleHighlight

TitleButtonShadowDepth 1
TitleShadowDepth 1
TitleButtonBorderWidth 0
TitlePadding 0
TitleJustification 'left'
ButtonIndent 0
FramePadding 0

LeftTitleButton ':xpm:dot' = f.menu 'titleops'
RightTitleButton ':xpm:resize' = f.resize
RightTitleButton ':xpm:cross' = f.delete

BorderShadowDepth 2
BorderResizeCursors

MaxIconTitleWidth 120
NoIconManagerFocus
IconManagerShadowDepth 1
IconifyByUnmapping

ReallyMoveInWorkspaceManager
MapWindowCurrentWorkSpace { 'black' 'firebrick' }
DontToggleWorkSpaceManagerState
DontWarpCursorInWMap
NoShowOccupyAll
ReverseCurrentWorkspace
StartInMapState
WMgrHorizButtonIndent 0
WMgrVertButtonIndent 0

WorkSpaces
{
'1' { 'lavender' 'black' 'darkslateblue' 'white' }
'2' { 'lavender' 'black' 'darkslateblue' 'white' }
'3' { 'lavender' 'black' 'darkslateblue' 'white' }
'4' { 'lavender' 'black' 'darkslateblue' 'white' }
'5' { 'lavender' 'black' 'darkslateblue' 'white' }
}

Cursors
{
Frame 'left_ptr'
Title 'left_ptr'
Icon 'left_ptr'
IconMgr 'left_ptr'
Move 'fleur'
Resize 'fleur'
Menu 'left_ptr'
Button 'hand2'
Wait 'watch'
Select 'dot'
Destroy 'pirate'
}

Color
{
BorderColor 'firebrick'

BorderTileBackground 'steelblue'
BorderTileForeground 'steelblue'

DefaultBackground 'grey70'
DefaultForeground 'black'

TitleBackground 'lavender'
TitleForeground 'black'

MenuBackground 'lavender'
MenuForeground 'black'
MenuTitleBackground 'darkorange2'
MenuTitleForeground 'black'
MenuShadowColor 'gray15'

IconBackground 'black'
IconForeground 'white'
IconBorderColor 'gray45'

IconManagerBackground 'lavender'
IconManagerForeground 'black'
IconManagerHighlight 'firebrick'

MapWindowBackground 'lavender'
MapWindowForeground 'black'
}

Monochrome
{
BorderColor 'black'

BorderTileForeground 'black'
BorderTileBackground 'white'

TitleForeground 'black'
TitleBackground 'white'

MenuForeground 'black'
MenuBackground 'white'
MenuTitleForeground 'black'
MenuTitleBackground 'white'

MapWindowForeground 'white'
MapWindowBackground 'white'
}

syscmd(/usr/X11R7/libexec/ctwm_app_menu)

menu 'appmenu'
{
'Applications pkgsrc' f.title
' Accessoires' f.menu 'Accessories'
' Jeux' f.menu 'Games'
' Graphique' f.menu 'Graphics'
' Internet' f.menu 'Internet'
' Multimedia' f.menu 'Multimedia'
' Bureautique' f.menu 'Office'
' Programmation' f.menu 'Programming'
' Systeme' f.menu 'System'
' Divers' f.menu 'Misc'
}


menu 'deskutils'
{
'Utilitaires de bureau' f.title
' Calculatrice' !'xcalc &'
' Editeur de texte' !'xedit &'
'' f.separator
' XEyes' !'xeyes &'
' OpenGL Gears' !'glxgears &'
' Cube tournant' !'ico -sleep 0.016 -obj cube -colors darkorange &'
'' f.separator
' Compositeur (ombres)' !'pkill xcompmgr; xcompmgr -c &'
' Compositeurr (simple)' !'pkill xcompmgr; xcompmgr -n &'
'' f.separator
' Loupe' !'xmag -source 100x100 &'
' Fermer la fenêtre' !'xkill &'
}

menu 'termutils'
{
'Utiliaires du Terminal' f.title
'' f.separator
' Editeur VIsual' !'xterm -class UXTerm -e vi &'
' Tetris' !'xterm -class UXTerm -e tetris &'
'' f.separator
' Egaliseur audio' !'xterm -class UXTerm -e aiomixer &'
'' f.separator
' Liste des processus' !'xterm -class UXTerm -e top &'
' I/O stats' !'xterm -class UXTerm -e 'sysstat iostat' &'
' Statistiques reseau' !'xterm -class UXTerm -e 'sysstat ifstat' &'
' Utilisation du disque' !'xterm -class UXTerm -e 'sysstat df' &'
}

menu 'NetBSD'
{
'NetBSD' f.title
'' f.separator
' Terminal' !'uxterm &'
'' f.separator
' Applications' f.menu 'appmenu'
' Utilitaires de Bureau' f.menu 'deskutils'
' Utilitaires du Terminal' f.menu 'termutils'
'' f.separator
' Redemarrer CTWM' f.twmrc
' Quitter' f.quit
}

menu 'titleops'
{
'Fenetre' f.title
'' f.separator
' Iconifier' f.iconify
' Redimensionner' f.resize
' Deplacer' f.move
'' f.separator
' Occuper ...' f.occupy
' Occuper tout' f.occupyall
'' f.separator
' Elever' f.raise
' Abaisser' f.lower
'' f.separator
' Zoom' f.fullzoom
' Zoom-V' f.zoom
' Zoom-H' f.horizoom
'' f.separator
' Arreter' f.destroy
' Fermer' f.delete
}

IconManagerDontShow
{
}

OccupyAll
{
'XClock'
'xsm'
'xconsole'
'XVidCap'
}

AlwaysOnTop
{
'XEyes'
'XVidCap'
}

NoTitle
{
'TWM Icon Manager'
'WorkSpaceManager'
'XClock'
}

WindowRingExclude
{
'TWM Icon Manager'
'WorkSpaceManager'
'XClock'
'xsm'
'xconsole'
}

StartIconified
{
}

NoBorder
{
}

Function 'raise-move' { f.raise f.deltastop f.forcemove }
Function 'raise-and-resize' { f.raise f.deltastop f.resize }

# These are basically essential for basic functionality.

Button1 = : title : f.function 'raise-move'
Button2 = : title : f.function 'raise-and-resize'
Button3 = : title | frame : f.menu 'titleops'

Button1 = : frame : f.function 'raise-and-resize'

Button1 = : icon | iconmgr : f.iconify
Button2 = : icon : f.move
Button3 = : icon | iconmgr : f.raiselower

Button1 = : root : f.menu 'NetBSD'
Button2 = : root : f.menu 'TwmAllWindows'
Button3 = : root : f.menu 'NetBSD'

#
# Mod1 is the 'Alt/Meta' key.
# Mod4 is the 'OS' key.
#

Button1 = mod1 : window : f.forcemove
Button1 = mod4 : window : f.forcemove
Button3 = mod1 : window : f.resize
Button3 = mod4 : window : f.resize

'Up' = mod4 : all : f.upworkspace
'Down' = mod4 : all : f.downworkspace
'Left' = mod4 : all : f.prevworkspace
'Right' = mod4 : all : f.nextworkspace


###################
# Raccourcis personnalisés :
#

# - Lancer Thunar :
'e' = mod4 : all : !'thunar &'

# - Lancer xscreensaver
'L' = mod4 : all : !'xscreensaver-command -lock &'

# - Maximiser l'affichage d'une fenêtre :
'B' = mod4 : window : f.fullzoom

# - Lancer firefox
'F' = mod4 : all : !'firefox &'

# - Lancer thunderbird
'T' = mod4 : all : !'thunderbird &'

# - Lancer l'outil de captures d'écran :
'C' = mod4 : all : !'xfce4-screenshooter &'

###################


'Up' = mod1 | control : all : f.upworkspace
'Down' = mod1 | control : all : f.downworkspace
'Left' = mod1 | control : all : f.prevworkspace
'Right' = mod1 | control : all : f.nextworkspace

'1' = mod1 | control : all : f.gotoworkspace '1'
'2' = mod1 | control : all : f.gotoworkspace '2'
'3' = mod1 | control : all : f.gotoworkspace '3'
'4' = mod1 | control : all : f.gotoworkspace '4'
'5' = mod1 | control : all : f.gotoworkspace '5'
'6' = mod1 | control : all : f.gotoworkspace '6'
'7' = mod1 | control : all : f.gotoworkspace '7'
'8' = mod1 | control : all : f.gotoworkspace '8'
'9' = mod1 | control : all : f.gotoworkspace '9'

'1' = mod4 : all : f.gotoworkspace '1'
'2' = mod4 : all : f.gotoworkspace '2'
'3' = mod4 : all : f.gotoworkspace '3'
'4' = mod4 : all : f.gotoworkspace '4'
'5' = mod4 : all : f.gotoworkspace '5'
'6' = mod4 : all : f.gotoworkspace '6'
'7' = mod4 : all : f.gotoworkspace '7'
'8' = mod4 : all : f.gotoworkspace '8'
'9' = mod4 : all : f.gotoworkspace '9'

'XF86AudioRaiseVolume' = : all : !'mixerctl -w outputs.master+=5'
'XF86AudioLowerVolume' = : all : !'mixerctl -w outputs.master-=5'
#'XF86AudioMute' = : all : !'mixerctl -w outputs.master=0'

#
# 'Windows' style keyboard shortcuts
#

'Tab' = mod1 : all : f.warpring 'next'
'Tab' = mod1 | s : all : f.warpring 'prev'
'Tab' = mod4 : all : f.warpring 'next'
'Tab' = mod4 | s : all : f.warpring 'prev'
'space' = mod1 : window : f.menu 'titleops'
'F4' = mod1 : window : f.delete

#
# 'Mac' style keyboard shortcuts
#

'w' = mod4 : window : f.delete
'm' = mod4 : window : f.iconify

#
# 'evilwm' style keyboard shortcuts
#

# it is useful to be able to spawn a terminal without clicking.
'Return' = mod1 | c : all : !'uxterm &'
'Return' = mod4 | s : all : !'uxterm &'

'slash' = mod1 | c : all : f.menu 'TwmAllWindows'
'slash' = mod4 : all : f.menu 'TwmAllWindows'
'p' = mod1 | c : all : f.menu 'NetBSD'
'p' = mod4 : all : f.menu 'NetBSD'

# vi-style directions
'j' = mod1 | control : window : f.jumpdown '10'
'k' = mod1 | control : window : f.jumpup '10'
'h' = mod1 | control : window : f.jumpleft '10'
'l' = mod1 | control : window : f.jumpright '10'

'j' = mod4 : window : f.jumpdown '10'
'k' = mod4 : window : f.jumpup '10'
'h' = mod4 : window : f.jumpleft '10'
'l' = mod4 : window : f.jumpright '10'

'j' = mod4 | s : window : f.changesize 'bottom +10'
'k' = mod4 | s : window : f.changesize 'bottom -10'
'h' = mod4 | s : window : f.changesize 'right -10'
'l' = mod4 | s : window : f.changesize 'right +10'

'j' = mod1 | c | s : window : f.changesize 'bottom +10'
'k' = mod1 | c | s : window : f.changesize 'bottom -10'
'h' = mod1 | c | s : window : f.changesize 'right -10'
'l' = mod1 | c | s : window : f.changesize 'right +10'

Activation des modifications

Pour activer les modifications, suffit de cliquer n'importe où 'Restart CTWM'



↑ Haut de page