Alors …
Mon choix de DE léger s’est porté sur openbox, je vous propose mon retour
Installation de Xephyr et Openbox (D11) :
user@host:~ # apt install -y xserver-xephyr
user@host:~ # apt install --no-install-recommends -y openbox obconf
Ajouter une nouvelle fenêtre de confinement pour gimp
Attention : ici on ne gère pas l’utilisation de multiple fenêtres, donc bien tuer chaque fenêtre avant d’en ouvrir une autre …
Bug visuel : quand on verrouille la taille d’une fenêtre, sur les bords le curseur garde son aspect de redimensionnement même si c’est impossible
On ouvre un autre affichage à l’échelle de la taille de l’écran du smartphone (dans mon cas en 2312 x 1080) :
# Sur écran physique 1680x1050
user@host:$ Xephyr -resizeable -nocursor -ac -softCursor \
-nolock -zaphod -screen 1156x540 -title 'WM_NAME_TITLE' :1
# Sur écran physique 1920x1080
user@host:$ Xephyr -resizeable -nocursor -ac -softCursor \
-nolock -zaphod -screen 1734x810 -title 'TITRE_XEPHYR' :1
Notes sur les paramètres
Notes (Xephyr --help
plus complet que man Xephyr
) :
-nolock
ne peut être utilisé que par root
-zaphod
empêche de changer d’espace de travail (il me semble ; à revoir)
-resizeable
(optionnel) permet de redimensionner (pas utile dans mon cas)
-nocursor
enlève le curseur X de Xorg
-softCursor
fait la jointure avec le DE en cours (à revérifier)
-ac
je ne suis pas sûr que ce soit nécessaire
:1
est le numéro d’affichage (variable DISPLAY)
Fenêtre NON identifiable sous weylus
Dans mon cas, l’application weylus
ne doit PAS lire la bonne propriété, ce qui donne des titres de fenêtre UNKNOWN (pas super pratique ; voir imprimé dessous)
Détails pour la résolution
Quelle est la propriété que weylus
lit ?
En exécutant xprop
interactivement (quand le + apparaît, je clicke dans la fenêtre Xephyr
) :
user@host:$ xprop | grep -TITRE_XEPHYR
WM_NAME(STRING) = "TITRE_XEPHYR"
Donc seul WM_NAME est disponible.
Or les autres fenêtres qui ont un nom identifiable ont d’autres propriétés.
Par exemple xprop
sur CETTE page de mon navigateur firefox
donne :
user@host:$ xprop \
| grep "Fenêtre pour confiner une application plein écran ..."
WM_ICON_NAME(STRING) = "Fenêtre pour confiner ..."
_NET_WM_ICON_NAME(UTF8_STRING) = "Fenêtre pour confiner ..."
WM_NAME(STRING) = "Fenêtre pour confiner ..."
_NET_WM_NAME(UTF8_STRING) = "Fenêtre pour confiner ..."
On voit 2 propriétés NAME intéressantes (ICON semble hors sujet) : WM_NAME(STRING) et _NET_WM_NAME(UTF8_STRING)
J’en déduis que weylus
lit _NET_WM_NAME qui n’existe pas.
On va tenter d’ajouter manuellement la propriété NET_WM_NAME.
Il faut d’abord obtenir l’ID de la fenêtre soit interactivement avec xwininfo
+ click, soit en se basant sur la propriété WM_NAME :
user@host:$ xwininfo -tree -root | grep TITRE_XEPHYR
0x2c00026 "TITRE_XEPHYR": ...
# => ici ID de fenêtre = 0x2c00026
user@host:$ ID=$( xwininfo -tree -root \
| awk '/TITRE_XEPHYR/ { print $1 }' )
# Vérifier
user@host:$ xprop -id $ID | grep WM_NAME
WM_NAME(STRING) = "TITRE_XEPHYR"
Alors seulement on peut ajouter la nouvelle propriété :
user@host:$ xprop -id $ID -f _NET_WM_NAME 8u \
-set _NET_WM_NAME "gimp dans openbox sur Xephyr"
# Vérifier que la nouvelle propriété a été ajoutée
user@host:$ xprop -id $ID | grep WM_NAME
_NET_WM_NAME(UTF8_STRING) = "gimp dans openbox sur xephyr"
WM_NAME(STRING) = "TITRE_XEPHYR"
# => OK
Et … tadaaaaaa la fenêtre est identifiable !!!
Il suffisait donc d’ajouter la propriété _NET_WM_NAME :
user@host:$ ID=$( xwininfo -tree -root \
| awk '/TITRE_XEPHYR/ { print $1 }' )
user@host:$ xprop -id $ID -f _NET_WM_NAME 8u \
-set _NET_WM_NAME "gimp dans openbox sur xephyr"
Et la fenêtre est correctement identifiée par weylus
depuis mon smartphone :
Configurer openbox pour que gimp s’ouvre en fullscreen
Avertissement : pour éviter de quitter prématurément la session utilisateur en cours sans avertissement (j’en ai fait les frais ), j’ai désactivé dans un 2e temps le menu openbox
pour contraindre à fermer par la fenêtre Xephyr
en mettant en commentaire la ligne qui ouvre le menu (rappel : en XML un commentaire est contenu entre <!-- et -->
). Au final, un click dans l’espace openbox
, indiquera une erreur comme quoi le menu n’est pas disponible.
Voir aussi : Help:Applications - Openbox
user@host:$ mkdir $HOME/.config/openbox
user@host:$ grep -c @ /etc/xdg/openbox/rc.xml |
0
user@host:$ cat /etc/xdg/openbox/rc.xml | tr '\n' '@' \
| sed -e 's'\
'#<applications>@<!--@'\
'#<applications>'\
'@ <application name="gimp*">'\
'@ <fullscreen>yes</fullscreen>'\
'@ </application>@<!--@'\
'#g' \
-e 's@<file>menu.xml</file>@<!-- file>menu.xml</file -->@g' \
| tr '@' '\n' > $HOME/.config/openbox/rc_Xephyr.xml
Explications
-
tr
convertit les sauts de ligne \n en @ au début puis à fin fait l’opération inverse (j’ai vérifié avant que le fichier ne contenait pas de @) et j’ai utilisé # comme séparateur de la commande substitution de sed
pour clarifier l’écriture
- pour autoriser uniquement le fullscreen pour
gimp
, on filtre avec la propriété name (voir aussi ceci)
Vérification
user@host:$ cat $HOME/.config/openbox/rc_Xephyr.xml
...
<!-- file>menu.xml</file -->
...
<applications>
<application name="gimp*">
<fullscreen>yes</fullscreen>
</application>
</applications>
</openbox_config>
=> OK
Ouvrir gimp dans openbox depuis une fenêtre de confinement Xephyr
Ajouter une nouvelle fenêtre de confinement Xephyr
en tant que DISPLAY :1 (voir dessus).
Ouvrir gimp dans un DE openbox
confiné dans le DISPLAY :1
user@host:$ DISPLAY=:1 openbox \
--config-file $HOME/.config/openbox/rc_Xephyr.xml \
--startup gimp
Et voilà !!!
Un exemple de fenêtre gimp confinée (zone de dessin sans et avec groupes de fenêtres - docks) :
Donc mille merci pour Xephyr, bien utile !
Problème résolu !