Fenêtre pour confiner une application plein écran

Tags: #<Tag:0x00007fb41b7ae5c8> #<Tag:0x00007fb41b7ae4d8>

Coucou tout le monde :slight_smile:

[edit]Je ne sais pas si je suis dans la bonne rubrique, si ce n’est pas le cas désolé ![/edit]

Je viens de découvrir Weylus (rendu visuel) pour dessiner à distance (ex : Gimp) depuis mon smartphone aux dimensions incompatibles avec mes moniteurs, ce qui donne des zones « mortes » (voir ce fil dédié Gimp).

Je me suis donc demandé si je ne pouvais pas « confiner » mon application en plein écran dans une fenêtre à l’échelle.

J’ai découvert qu’on pouvait créer un moniteur virtuel mais qui resterait lié aux moniteurs physiques (pertinent ?).

Est-ce possible ? Comment ?

Note : je peux détailler si ça ne semble pas clair …

Merci d’avance pour le temps que vous m’accorderez :smiley:

Avec adelphité,
lnj

Nos beaux dits ?

Si, je suis là et je suis le sujet car c’est quelque chose que j’aimerai bien pouvoir faire, mais je ne vois pas comment faire.
J’avais essayé avec Xephyr (ou un truc du genre), mais ça n’avais pas fonctionné (je ne sais plus ce que j’avais eu comme problème).

Hello et merci pour ta participation :grinning:

Waouh ! Nickel, je ne connaissais pas.

Je suis en train de tester mais pour l’instant il y a des trucs problématiques que je ne m’explique pas : certaines applications s’affichent au coin en haut à gauche de la fenêtre Xephyr (mousepad,audacity), d’autres à une position bizarre et affichent ou pas totalité de leur fenêtre (gimp, vlc), d’autres se lancent mais n’affichent rien (blender ; j’imagine qu’il y a un relais à faire avec la bibliothèque graphique) ; mais dans tous les cas je n’arrive pas à déplacer toutes les fenêtres intégrées (cas de gimp), ni les redimensionner, ni à les mettre en plein écran sur la fenêtre Xephyr (vlc se met bien en plein écran mais sur son espace propre).

Mon dernier test :
Xephyr -resizeable -nocursor -ac -softCursor -screen 1024x768 :1

[edit]Je viens de tester la création d’une fenêtre plus grande que le moniteur physique mais qui peut être redimensionnée avec succès : Xephyr -resizeable -nocursor -ac -softCursor -screen 2312x1080 :1[/edit]

J’ai vu qu’il y avait toute une foule de paramètres possibles, mais lesquels sont pertinents ? Mystère …

Ah oui, je me souviens, en fait, tu as un serveur X11 nu, comme il n’y a pas de gestionnaire de fenêtres, tu ne peux pas redimensionner les fenêtres et elles ont une taille qui est rarement celle que tu veux. Quand je l’ai remarqué, j’ai eu une poussée de flemmingite aiguë et j’ai laissé tomber.
Tu peux essayer de lancer le gestionnaire de fenêtre de ton environnement de bureau ou un qui serait plus léger.

Alors …

Mon choix de DE léger s’est porté sur openbox, je vous propose mon retour :slight_smile:

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 :smiley: !!!

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 :

image

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 :wink: ), 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à :smiley: !!!

Un exemple de fenêtre gimp confinée (zone de dessin sans et avec groupes de fenêtres - docks) :
image image


Donc mille merci pour Xephyr, bien utile :wink: !

Problème résolu !

2 J'aime

Ah, super, si je veux retenter d’utiliser Xephyr à l’occasion, je tenterai de faire comment tu as fait.