Créer des écrans virtuels sur Linux (pour les érans ultra-wide)

25 septembre 2023
Aymeric

Des écrans virtuels ?

L'objectif de la mise en place d'écrans virtuels est de pouvoir scinder votre écran physique en plusieurs écrans virtuels. Cela peut être très pratique pour les écrans ultra-wide par exemple.

Voici une illustration de la chose :

exemple d'écrans virtuels

Votre système considère donc qu'il y a 3 écrans et non pas un seul.

Quels intérêts ?

Partage d'écran

Le premier intérêt qui me vient à l'esprit est lié au partage d'écran, ou à l'enregistrement de l'écran.

Avec un écran ultra-large, lorsque vous souhaitez partager votre écran, ce n'est pas du tout pratique, car le partage est beaucoup trop large (la résolution de certains ultra-large étant de 5120x1440).

Avec l'exemple dans l'illustration précédente, nous pouvons partager l'écran virtuel 2, d'une taille de 2560x1440.

Agencement de vos fenêtres

L'autre problème avec les écrans ultra-wide et les gestionnaires de fenêtres classique (Gnome, Cinammon, ...) c'est que lorsque vous souhaitez passer une fenêtre en plein écran (ou juste l'agrandir pour qu'elle s'ajuste à la taille de l'écran), et bien elle va prendre tout votre écran. Ce n'est pas très pratique.

Avec des écrans virtuels, celle-ci prendra la taille de l'écran virtuel dans lequel elle est placée !

La solution

Les limitations

Avant tout, il faut savoir que cette solution ne marche pas dans tous les cas. Je n'ai réussi à la faire fonctionner qu'avec le gestionnaire de fenêtre i3 .

A priori un bug avec GTK empêche le bon fonctionnement de cette solution sur beaucoup de gestionnaires de fenêtre (Gnome, Cinnamon, ...).

Par ailleurs, cette solution utilisant xrandr , elle ne fonctionne que sur X.org

En espérant que dans le futur les choses s'améliorent.

C'est parti

# On supprime les moniteurs virtuels que l'on a créées
# ce qui permet de relancer le script
xrandr --delmonitor DisplayPort-1-1
xrandr --delmonitor DisplayPort-1-2
xrandr --delmonitor DisplayPort-1-3

# On crée nos moniteurs virtuels. J'ai un écran ultra-large (5120x1440)
# et je souhaite créer 3 écrans virtuels (cf l'image plus en début d'article).
# Le format de la commande est le suivant
# xrandr --setmonitor DisplayPort-1-1 {x_px}/{x_mm}x{y_px}/{y_mm}+{decal_x_px}+{decal_y_px} {moniteur_physique_name}
xrandr --setmonitor DisplayPort-1-1 1180/274x1440/340+0+0 DisplayPort-1
xrandr --setmonitor DisplayPort-1-2 2560/595x1440/340+1180+0 none
xrandr --setmonitor DisplayPort-1-3 1380/321x1440/340+3740+0 none

# On force le refresh du framebuffer. Chez moi j'ai eu besoin de le faire, mais
# a priori certain n'on pas eu à le faire.
xrandr --fb 5120x1441
xrandr --fb 5120x1440

On constate que seul le premier --setmonitor porte un {moniteur_physique_name} , pour les suivants, on utilise none .

Pour les tailles, on est obligé d'utiliser en px et en mm. Pour avoir toutes les infos sur votre écran (dont ces tailles en mm), utiliser la commande xrandr

Conclusion

Bien que cette solution semble pour le moment très limitée, je la garde côté au cas les choses évoluent avec GTK.

En espérant vous avoir un peu renseignés :).

Articles récents

Catégories

Tags