Rendez-vous sur Arrakis

C'est lorsque nous croyons savoir quelque chose qu'il faut justement réfléchir un peu plus profondément. F. Herbert

Personnaliser l'écran de connexion d'OpenBSD : xenodm

OpenBSD propose par défaut un écran de connexion géré par xenodm, tout comme le fait aussi gdm, kdm ou lightdm. Cependant, son apparence par défaut laisse à désirer…

Puisque je n'ai pas forcément envie d'installer un autre gestionnaire de connexion, c'est parti pour configurer xenodm.

Tout d'abord, notez que la configuration se déroule dans un fichier /etc/X11/xenodm/Xresources. Puisque je ne veux pas risquer que ma configuration soit écrasée par une mise à jour, je vais la réaliser dans un autre fichier que celui par défaut.

doas cp /etc/X11/xenodm/Xresources /etc/X11/xenodm/Xresource-custom

Toutes les modifications se feront dans /etc/X11/xenodm/Xresource-custom. Je le précise dans la configuration de xenodm. Pour ça, on édite le fichier /etc/X11/xenodm/xenodm-config :

! DisplayManager*resources:  /etc/X11/xenodm/Xresources
 DisplayManager*resources:  /etc/X11/xenodm/Xresources-custom

Avant de configurer, je voudrais changer le fond derrière le widget de connexion. Il faut pour ça éditer le fichier /etc/X11/xenodm/Xsetup_0 pour y mettre par exemple une commande remplissant l'écran avec un fond uni :

xsetroot -solid "#001932"

Ou bien qui appose un fond d'écran (disponible ici) :

/usr/local/bin/feh --bg-scale /home/xavier/Images/Wallpapers/jarvis.jpg

Pensez à bien mettre le chemin complet vers l'outil qui définit le fond d'écran. Notez que vous pouvez lancer n'importe quelle commance, comme par exemple un terminal ou autre :

xterm +sb -bg black -fg green -geometry 100x22-0-0 cmatrix &

On peut commencer la configuration à proprement parler en modifiant le fichier /etc/X11/xenodm/Xresource-custom. Chaque élément de configuration est expliqué ici. Principalement, j'ai modifié les couleurs, les polices et les messages “login” et “password” pour obtenir ça :

Et voici la configuration :


 ! $OpenBSD: Xresources.cpp,v 1.1 2016/10/23 08:30:37 matthieu Exp $
 !
 !
 !
 !
 !
 
 
 
 
 xlogin*login.translations: #override \
    Ctrl<Key>R: abort-display()\n\
    <Key>F1: set-session-argument(failsafe) finish-field()\n\
    <Key>Left: move-backward-character()\n\
    <Key>Right: move-forward-character()\n\
    <Key>Home: move-to-begining()\n\
    <Key>End: move-to-end()\n\
    Ctrl<Key>KP_Enter: set-session-argument(failsafe) finish-field()\n\
    <Key>KP_Enter: set-session-argument() finish-field()\n\
    Ctrl<Key>Return: set-session-argument(failsafe) finish-field()\n\
    <Key>Return: set-session-argument() finish-field()
 
 xlogin*greeting: .: AUTH ON CLIENTHOST :.
 xlogin*namePrompt: login =
 xlogin*passwdPrompt: password =
 xlogin*fail: Login incorrect
 
 xlogin*greetFont: Hack-16:dpi=75
 xlogin*font: Hack-14:dpi=75
 xlogin*promptFont: Hack-14:dpi=75
 xlogin*failFont: Hack-14:dpi=75
 xlogin*greetFace:       Hack-14:dpi=75
 xlogin*face:            Hack-14:dpi=75
 xlogin*promptFace:      Hack-14:dpi=75
 xlogin*failFace:        Hack-14:dpi=75
 
 ! Change this according to your screen
 ! Use ``xdotool getmouselocation`` to find coordinates
 xlogin.Login.width: 220
 xlogin.Login.height: 140
 xlogin.Login.x: 280
 xlogin.Login.y: 50
 
 ! Colors
 xlogin*background: #000001
 !   The color used to display the input typed by the user.
 xlogin.Login.foreground: #52AEF4
 !    The color used to display the greeting.
 xlogin.Login.greetColor: #21B4FD
 !The color used to display prompts.
 xlogin.Login.promptColor: #52AEF4
 ! fail text color
 xlogin*failColor: red
 ! input background color
 xlogin*inpColor: #000001
 
 xlogin*borderWidth: 0
 xlogin*frameWidth: 0
 xlogin*innerFramesWidth: 0
 xlogin.Login.sepWidth: 0
 xlogin.Login.sepWidth: 0
 
 !    If set to true, a placeholder character (echoPasswdChar) will be shown for fields normally set to not echo, such as password input. The default is false.
 xlogin.Login.echoPasswd: true
 
 xlogin.Login.allowRootLogin:   false
 
 XConsole*background:   black
 XConsole*foreground:   white
 XConsole*borderWidth:  2
 XConsole*borderColor:   grey
 XConsole.text.geometry:    480x130
 XConsole.verbose:  true
 XConsole*iconic:   true
 XConsole*font:     fixed
 

À votre tour de montrer votre écran d'accueil. Les possibilités sont infinies, laissez libre cours à votre imagination! N'oubliez pas que vous pouvez lancer n'importe quelle commande en éditant le fichier Xsetup_0. Qui a envie de mettre un conky ? Des widgets qui vont chercher une VDM? Ou bien le script ci-dessous (cadeau!) :

#!/bin/sh
 # Auteur :      thuban <thuban@yeuxdelibad.net>
 # licence :     MIT
 # Description : surprise !
 
 URL="$(/usr/bin/ftp -o - 'http://feeds.feedburner.com/BonjourMadame?format=xml' | /usr/bin/grep -o 'src="http[^"]*"'| /usr/bin/cut -d\" -f2 | /usr/bin/head -n1)"
 ftp -o /tmp/bm.jpg "$URL"
 /usr/local/bin/display /tmp/bm.jpg &
 

le 08/08/2017 à 21:49:47, John Doe a dit :

Hello thuban,

Est-ce que xenodm gère le vérrouillage écran?

sinon, assez 90’s ton thème mais merci :)

le 09/08/2017 à 07:44:49, thuban a dit :

@John Doe : Concernant le verouillage, je l'ignore en vérité. J'utilise des outils faits pour, comme slock ou bien celui disponible par défaut xlock.

xautolock -time 10 -locker slock

Eh oui, c'est voulu pour le thème. Que veux-tu, on ne refait pas sa jeunesse :P

le 13/08/2017 à 10:28:11, PengouinPdt a dit :

Tiens, tiens, tiens… merci @thuban.

Cela me rappelle que j'avais fait ce tutoriel sur notre “zoli” forum :
https://obsd4a.net/qa/viewtopic.php?id=101
Que j'ai repris sur mon blog ;)

Pour la gestion du fond d'écran, personnellement j'ai installé l'outil ‘qiv’ - qui n'est pas dans le système de base, mais accessible en tant que package - car il a le propos d'afficher de manière aléatoire à chaque connexion un fond d'écran différent. Il suffit de lui indiquer un répertoire dans lequel il peut “piocher” ceux-ci !

Pour ce qui est de créer une copie que tu retravailles, c'est une idée intéressante ; néanmoins, pour rester dans la philosophie d'OpenBSD, je l'aurais simplement renommer ‘XResources.local’ ;)
Et, pour être tranquille, je l'aurais mis dans mon home. Puis modifier le fichier /etc/xenodm.config, en ce sens. C'est dommage, que du fait que ce projet soit un fork de xdm, il ne gère pas les fichiers personnels, ce qui aurait évité ce genre de bidouille. (ainsi, on aurait pu écrire un fichier ~/XResources, par exemple).

Après, étant donné la manière de travailler de l'équipe d'OpenBSD, le fichier ressources ne devrait pas être réécrit sans ton accord. Je serais très surpris du contraire.

J'aime bien le fait que tu es mis ta config du fichier XResources, ainsi que la capture d'écran.
Cela permet de se rendre compte de l'effet visuel. Et, surtout va me permettre d'adapter la mienne :p

le 13/08/2017 à 10:33:33, thuban a dit :

@PengouinPdt : Honte à moi, j'étais passé à côté de ton tuto, je n'ai utilisé que le man :s

qiv, feh, tout ça c'est à peu près pareil, mais ce n'est pas de base. ^^
Je me demande à quoi ils ont pensé avec ce fond gris tout moche. Un

xsetroot -solid black

aurait été plus beau !

Normalement non, OpenBSD ne va pas tout écraser, j'aurai la différence entre mon fichier et la nouvelle version lors du sysmerge de la mise à jour.

le 13/08/2017 à 10:37:31, PengouinPdt a dit :

Oui, voilà, c'est sysmerge dont je cherchais le nom ! :p

Sinon, pour le fichier “personnel” Xresources, pour respecter la philosophie de l'arborescence unix, à mettre dans ~/.config/xenodm - à créer bien sûr ;)

le 20/08/2017 à 15:37:04, sogal a dit :

Merci pour cet article, ça m'a fait découvrir xenodm (j'allais, par réflexe, installer slim).
Je voulais te coller une capture mais scrot ne capture pas le texte de l'invite…

le 21/08/2017 à 08:38:36, thuban a dit :

@sogal : slim marche très bien aussi :)
J'ai pendant longtemps utilisé seulement le login en tty avec un startx automatique. Dans le fichier ~/.profile :

if [ "$(tty)" == "/dev/ttyC0" ]; then
     startx
 fi
 

Sinon, si tu veux nous faire part de ton écran personnalisé, j'ai pris la capture d'écran en mettant scrot dans le fichier /etc/X11/xenodm/Xsetup_0 :


 scrot /tmp/xenodm.png &
 

le 21/08/2017 à 11:41:03, sogal a dit :

@thuban : pour scrot c'est ce que j'ai fait, la capture s'est bien effectuée à un détail près : le texte du prompt n'apparaît pas :-\ est-ce que c'est dû à la police (terminus) ? je vais réessayer avec une autre.
Sinon, pour info, j'ai voulu essayer d'avoir l'arrière plan du carré contenant le message d'accueil et les prompts pour login/password en transparent.
J'ai donc ajouté, à la façon de mon .Xdefaults pour urxvt :

xlogin.depth: 32
 xlogin.background: [90]#131313

et bien il a pas aimé DU TOUT :) xenodm est parti dans une boucle sans fin d'arrêt / démarrage semble t'il, impossible à dépêtrer, j'ai du redémarrer en single user pour éditer le fichier fautif.

le 21/08/2017 à 11:49:43, thuban a dit :

@sogal : Ajoute un délai d'attente avec “sleep 3” par exemple avant de lancer scrot pour avoir le texte du prompt :

sleep 3 && scrot &

C'est voulu le “[90]” dans ta configuration? Parce que effectivement, ça ne doit pas lui plaire…

le 21/08/2017 à 12:00:09, PengouinPdt a dit :

Attention, à Slim qui est faillible et n'est plus màj, apparemment. Cf, une des discussions du forum.
Il vaut mieux utiliser xenodm, qui de surcroît, est l'outil natif d'OpenBSD.

le 21/08/2017 à 12:06:49, PengouinPdt a dit :

Ahh, au fait, il faudrait quand même mentionné quelque part, qu'il n'est intégré que depuis OpenBSD v6.1 ! (et pas avant… avant, il faut utiliser d'autres gestionnaires, tel que Slim)
Ahhh, beh, je viens de le faire ;)

le 21/08/2017 à 12:18:03, sogal a dit :

@ PengouinPdt : ;) oui il me semblait que j'avais lu à plusieurs reprises que slim est ± déprécié.
@ thuban : oui c'était voulu, j'ai tâché de reproduire ce qui fonctionnait pour d'autres composants utilisant des Xresources. Là je teste avec les options

xlogin*transparent: true
 xlogin*shading: 20

mais sans succès… pour l'instant !

le 21/08/2017 à 12:27:38, thuban a dit :

@PengouinPdt : Slim n'est plus mis à jour, reste à voir s'il comporte des failles. Un truc bien programmé peut très bien ne pas être mis à jour pendant longtemps.
Eh oui, pas avant la 6.1, mais quelle idée aussi de tourner sur de vieilles version ? ;P

@sogal : Lis bien la liste des options disponibles pour t'y retrouver sans perdre tout ton temps : https://man.openbsd.org/xenodm.1#RESOURCES
;)

le 21/08/2017 à 12:37:01, sogal a dit :

@ thuban : bien vu, j'étais en train d'éplucher la page de xdm mais autant prendre la source. conclusion : pas de transparence possible.
Néanmoins, ce n'est pas un échec total puisque scrot à bien voulu fonctionner “entièrement” ;) :
http://pix.toile-libre.org/upload/original/1503311740.png

le 21/08/2017 à 12:41:35, thuban a dit :

Pas de transparence non, mais tu peux tricher comme moi en mettant une couleur de fond identique au fond de l'image placée en arrière-plan.

voilà un écran de login qui donne envie de prendre le temps de noter son mot de passe… ;P

le 21/08/2017 à 12:53:30, sogal a dit :

@thuban : exactement, ça encourage à choisir un looooong mot de passe ;)

le 21/08/2017 à 13:29:52, PengouinPdt a dit :

@thuban: ahhh, je comprends mieux ! :p