Description
xenodm est un gestionnaire de sessions X, fourni dans le système de base d’OpenBSD, depuis 6.1 - le serveur X et les sessions graphiques !
C’est un dérivé du gestionnaire xdm
, purgé de beaucoup de codes, donc
plus léger, et débarrassé de potentielles failles de sécurités :
Xenodm is based on xdm source code. I’ve removed all support for XDMCP and other old cruft like ugly games with signals and setjmp(3)/longjmp(3) to set timeouts on potentially blocking operations. Another goal was to un-tangle the ifdef maze that supported various flavors of authentication methods, to only keep the BSDauth code used in OpenBSD.
ATTENTION :
Ne pas utiliser xenodm
avec l’environnement graphique Gnome3 !
Pour Gnome : Il est fortement recommandé d’utiliser GDM.
Configuration
Tous les fichiers de configuration se trouvent normalement être sur :
/etc/X11/xenodm/
Quelques explications :
xenodm-config
Le fichier /etc/X11/xenodm/xenodm-config
est le fichier de configuration
central du serveur xenodm. Il “redirige” vers les autres fichiers de
configuration spécifique… certains sont décrits ci-dessous.
Créer vos fichiers personnels, tel quel dans ~/.config/xenodm/
; faites
vos modifications dedans, puis modifier les variables DisplayManager*
dans le fichier /etc/X11/xenodm/xenodm-config
en la faisant pointer
vers vos fichiers personnels !
Mais attention à chaque upgrade de version d’OpenBSD, certains paramètres pourraient être dysfonctionnels - si vous avez des problèmes de connexion avec votre configuration personnalisée de xenodm, il serait plus prudent de repartir sur la base des fichiers originaux.
Auto-connexion
Vous désirez vous connecter automatiquement avec votre identifiant, sans avoir à le saisir constamment ?
Ajouter la variable suivante DisplayManager._0.autoLogin
, de telle manière :
DisplayManager._0.autoLogin: Identifiant
xenodm-config : Exemple
Exemple de fichier etc/X11/xenodm/xenodm-config
:
! $OpenBSD: xenodm-config.cpp,v 1.1 2016/10/23 08:30:37 matthieu Exp $
!
!
!
!
!
DisplayManager.authDir: /etc/X11/xenodm
DisplayManager.errorLogFile: /var/log/xenodm.log
DisplayManager.keyFile: /etc/X11/xenodm/xenodm-keys
DisplayManager.servers: /etc/X11/xenodm/Xservers
!DisplayManager*resources: /etc/X11/xenodm/Xresources
DisplayManager*resources: /home/UserId/.config/xenodm/Xresources
! All displays should use authorization, but we cannot be sure
! X terminals may not be configured that way, so they will require
! individual resource settings.
DisplayManager*authorize: true
!
DisplayManager*startup: /etc/X11/xenodm/Xstartup
DisplayManager*session: /etc/X11/xenodm/Xsession
DisplayManager*reset: /etc/X11/xenodm/Xreset
DisplayManager*authComplain: true
! The following three resources set up display :0 as the console.
!DisplayManager._0.setup: /etc/X11/xenodm/Xsetup_0
DisplayManager._0.setup: /home/UserId/.config/xenodm/Xsetup_0
!DisplayManager._0.startup: /etc/X11/xenodm/GiveConsole
DisplayManager._0.startup: /home/UserId/.config/xenodm/GiveConsole
DisplayManager._0.reset: /etc/X11/xenodm/TakeConsole
DisplayManager.*.authName: MIT-MAGIC-COOKIE-1
- Les lignes commençant par un
!
sont toutes des lignes de commentaires. - Par principe de précaution, j’ai dédoublé les lignes
DisplayManager*resources
,DisplayManager._0.setup
,DisplayManager._0.startup
en commentant celles en rapport avec les fichiers dans le répertoire de configuration principal, pour paramétrer ceux de fichiers dans le $HOME. - Remplacez
UserId
par votre identifiant de session…
Xresources
Le fichier /etc/X11/xenodm/Xresources
permet de modifier l’apparence
du gestionnaire (couleurs, polices, textes, etc.).
Arrêter l’exécution de xenodm
Pour sortir de l’exécution de xenodm, il est nécessaire de configurer le fichier Xresources afin d’ajouter ce qui suit :
xlogin.login.translations: #override \
Ctrl<Key>R: abort-display()
Cette astuce permet de basculer en mode console, en arrêtant le serveur de xenodm, par l’appui sur les touches Ctrl+R.
Interdire la connexion root
Pour interdire la connexion du compte root, il faut modifier ce fichier de configuration et décommenter la ligne 128, de telle manière :
xlogin.Login.allowRootLogin: false
Xresource : Exemple personnalisé
Exemple personnalisé du fichier $HOME/.config/xenodm/Xresource
:
! $OpenBSD: Xresources.in,v 1.1 2017/07/26 21:14:54 matthieu Exp $
DisplayManager*terminateServer: true
! ----------------------------------------------------------------------
! XLogin
!
xlogin.Login.allowRootLogin: false
xlogin.Login.echoPasswd: false
xlogin.Login.fail: Authorization failed
xlogin.Login.greeting:
xlogin.Login.namePrompt:
xlogin.Login.passwdPrompt:
xlogin.Login.y: 340
xlogin.Login.width: 480
xlogin*borderWidth: 0
xlogin.Login.frameWidth: 0
xlogin.Login.innerFramesWidth: 0
xlogin.Login.sepWidth: 0
xlogin.Login.face: DejaVu Sans-16
xlogin.Login.failFace: DejaVu Sans-18:bold
xlogin.Login.greetFace: DejaVu Sans-0
xlogin.Login.promptFace: DejaVu Sans-18
! ----------------------------------------------------------------------
! XMessage
!
!xmessage*background: nord0
!xmessage*foreground: nord4
xmessage*borderWidth: 0
xmessage*font: -*-terminus-bold-*-*-*-16-*-*-*-*-*-iso8859-15
xmessage*message.scrollHorizontal: Never
xmessage*message.scrollVertical: Never
xmessage*timeout: 0
Xsession
Le fichier /etc/X11/xenodm/Xsession
s’occupe de l’entrée en session
personnelle.
Un peu de décryptage utile :
- création et gestion d’un fichier personnel
~/.xsession-errors
, dont le but est de permettre au système d’écrire dedans tout problème relatif à l’exécution de l’entrée en session. C’est le fichier à vérifier IMPÉRATIVEMENT si vous rencontrez des problèmes de connexion. - gestion de l’agent SSH - si celui-ci est installé ET fonctionnel, c’est la raison pour laquelle il est demandé la saisie des clés SSH lors de la connexion. Si erreur, la session se fermera immédiatement.
- gestion du fichier personnel
~/.xsession
:- si le fichier existe ET qu’il n’est pas vide, il sera exécuté.
- si le fichier a des droits en exécution, il sera appelé directement
- à ce propos, il est recommandé dans le manpage que celui-ci doit avoir ces fameux droits.
- s’il n’a pas de droits en exécution, un appel système au shell sera fait pour l’exécuter.
- si le fichier n’existe pas, le système vérifiera l’existence d’un
fichier personnel
~/.Xresources
- copie personnelle du fichier/etc/X11/xenodm/Xresources
- pour le charger, ainsi exécuter les binairesxterm
, etfvwm
par défaut. C’est le seul cas, où si ce fichier existe, il sera lu…
Xsetup_0
Le fichier /etc/X11/xenodm/Xsetup_0
nous permet d’utiliser des binaires
X, tels que xconsole
(c’est la fameuse console de log qui s’affiche
par défaut), xclock
, display
, etc.
Exemple de fichier /etc/X11/xenodm/Xsetup_0
:
#!/bin/sh
# $OpenBSD: Xsetup_0,v 1.1 2016/10/23 08:30:37 matthieu Exp $
if [ "$DISPLAY" = ":0" -o "$DISPLAY" = ":0.0" ]
then
xconsole -geometry 480x130-0-0 -daemon -notify -verbose -fn fixed -exitOnFail
fi
⇒ display
permet, entres autres, d’avoir une image en fond d’écran…
/usr/local/bin/display -window root /home/user/Images/Wallpapers/OBSD_From_Dark_to_the_Light.png
(Retrouvez l’image en question…)
⇒ qiv
permet, entres autres, d’avoir un fond d’écran aléatoire, selon
les options fournies… à chaque fois que xenodm est relancé !
/usr/local/bin/qiv -zr /home/user/Images/Wallpapers/* &
(cet outil ne fait pas partie du système de base).
⇒ xclock
permet d’afficher une horloge…
/usr/X11R6/bin/xclock -d -update 1 -render &
Pour fermer automatiquement l’horloge, on récupère son id - dans le fichier
Xsetup_0
, sous la ligne déclarant le binaire, e.g.
:
echo $! > /var/run/xclock.pid
Exemple personnalisé
Exemple personnalisé du fichier $HOME/.config/xenodm/Xsetup_0
:
#!/bin/ksh
# $OpenBSD: Xsetup_0,v 1.1 2016/10/23 08:30:37 matthieu Exp $
if [ "$DISPLAY" = ":0" -o "$DISPLAY" = ":0.0" ]; then
BG_COLOR=$(/usr/X1R6/bin/xrdb -query | awk '/xroot.background/ { print $2 }')
OS_NAME=$(uname -n)
OS_INFO=$(uname -smr)
USER=id_user # changer par votre identifiant utilisateur
/usr/X11R6/bin/xrandr --output default --dpi 96
/usr/X11R6/bin/xset fp+ /usr/local/share/fonts/roboto
/usr/X11R6/bin/xsetroot -solid $BG_COLOR
# obtenir un fichier aléatoire dans un répertoire précis
set +A files /home/$USER/Images/OpenBSD-Art/*
N=${#files[@]} # Number of members in the array
((N=RANDOM%N))
img=${files[$N]}
/usr/local/bin/feh -b --bg-center -B $BG_COLOR -. -Z $img &
/usr/local/bin/qiv -zrd7 /home/$USER/Images/Wallpapers/* &
# menu
(
while true; do
/usr/X11R6/bin/xmessage -center \
-buttons "[ Sleep ]":20,"[ Restart ]":21,"[ Shutdown ]":22 ""
ACTION=$?
echo "Xmessage said: $ACTION"
if [ $ACTION -eq 20 ]; then /usr/sbin/zzz;
elif [ $ACTION -eq 21 ]; then
/usr/X11R6/bin/xsetroot -cursor_name watch
/sbin/shutdown -r now
elif [ $ACTION -eq 22 ]; then
/usr/X11R6/bin/xsetroot -cursor_name watch
/sbin/shutdown -p now
else echo "Something bad happened to Xmessage.";
fi
# stop looping if xclock died (hopefully killed by GiveConsole)
if [ -z "$(pgrep -U root /usr/X11R6/bin/xclock)" ]; then break; fi
done
) &
/usr/X11R6/bin/xclock -geometry -0+0 -d -update 1 -render \
-strftime "$OS_NAME ($OS_INFO) | %a. %d %b. %Y %H:%M:%S " &
#/usr/X11R6/bin/xclock -d -update 1 -render &
echo $! > /var/run/xclock.pid
fi
#sxpm OpenBSD.xpm &
À la différence, mon fichier appelle le shell ksh
, car pour définir un
fichier image aléatoire, je définis :
- un tableau nommé
files
dans lequel est attribué les noms de fichiers du répertoire cible… - la variable
N
qui, dans un premier temps, définit le nombre d’éléments du tableaufiles
, puis après être passer par un calculRANDOM
, - la variable
img
qui est attribué selon leN
ème élément du tableaufiles
, qui est ensuite appelé par le logicielfeh
.
Normalement, feh
devrait afficher l’image au centre de l’écran…
ça bogue, puisque elle est affichée depuis le haut à gauche.
La boucle while
permet d’afficher un menu linéaire, sous la zone de saisie
de session, affichant : [ Sleep ] [ Restart ] [ Shutdown ]
.
Cliquer avec la souris sur l’une ou l’autre des actions permet de déclencher
l’action nommée.
Pour l’exécution correcte de ce script Xsetup_0
, il faudra installer par
le biais du gestionnaire de paquets, et feh
, et qiv
.
GiveConsole
Le fichier /etc/X11/xenodm/GiveConsole
a pour propos de traiter des
instructions en sortie de xenodm.
Exemple personnalisé
Exemple personnalisé du fichier $HOME/.config/xenodm/GiveConsole
:
#!/bin/sh
# Assign ownership of the console to the invoking user
# $OpenBSD: GiveConsole,v 1.1 2016/10/23 08:30:37 matthieu Exp $
#
# By convention, both xconsole and xterm -C check that the
# console is owned by the invoking user and is readable before attaching
# the console output. This way a random user can invoke xterm -C without
# causing serious grief.
#
chown $USER /dev/console
if [ -c /dev/drm0 ]; then
chown $USER /dev/drm0
fi
/usr/X11R6/bin/sessreg -a -l $DISPLAY -u none -x /etc/X11/xenodm/Xservers $USER
if test -r /var/run/xclock.pid; then kill $(cat /var/run/xclock.pid); fi
pkill feh
pkill xmessage