Journal Utilisez une tablette ou tout autre ordinateur comme second écran sous labwc/wlroot

Posté par  . Licence CC By‑SA.
14
12
sept.
2026

Il y a quelques temps, Sébastien Rohaut a rédigé un journal qui m'a particulièrement intéressé : Utilisez une tablette ou tout autre ordinateur comme second écran

Mais aucune des solutions proposées ne convenaient vraiment à mon besoin. J'ai déjà Moonlight/Sunshine mais c'est une solution de streaming de l'host à travers le réseau et ce n'est pas exactement ce que je recherche.

Je cherchais à utiliser une solution qui utilise les possibilités natives de Wayland / wlroot + VA API, à pouvoir utiliser le refresh rate natif de ma tablette (144hz), à fonctionner sous Wayland + labwc/wlroots et ne pas avoir le contrôle du host depuis la tablette. En USB idéalement pour limiter la latence.

J'ai trouvé un projet qui n'était pas loin de répondre à mon besoin : Moreland

Son problème principal : il n'a juste pas de support labwc/wlroot.

Qu'à cela ne tienne, je n'ai aucune expérience en Rust… alors passons par un LLM.

J'ai pu forker et ajouter le support labwc/wlroot ainsi que la visibilité du curseur matériel grâce au LLM : Moreland-labwc

Voila, une poignée de lignes modifiées et mon fork de moreland intègre le support labwc/wlroot à présent.

Reste à créer une sortie virtuelle. Et ça, labwc sait le faire nativement !

Dans mon rc.xml j'ajoute mon keybind pour créer et supprimer cette sortie virtuelle :

<keybind key="W-t">
  <action name="VirtualOutputAdd" output_name="moreland"/>
  <action name="Execute"
          command="sh -c 'sleep 0.2; ~/Scripts/moreland-start.sh'"/>
</keybind>
<keybind key="W-S-t">
  <action name="Execute" command="pkill -x moreland"/>
  <action name="VirtualOutputRemove" output_name="moreland"/>
</keybind>

Et mon script moreland-start.sh :

    wlr-randr \
      --output moreland \
      --custom-mode 2560x1810@120Hz \
      --pos 6002,0

    if ! pgrep -x moreland >/dev/null; then
        nohup moreland --fps 120 --position 6002 \
            >/dev/null 2>&1 &
    fi

J'ai choisi 120Hz plutôt que 144Hz parce que la latence était diablement meilleure, et à l'oeil voir les 24Hz manquants faut être quand même bien rodé…

C'est déjà fini… On branche sa tablette en USB et on utiliser notre keybind défini (super + T) pour créer notre sortie virtuelle et déclencher le script.

Titre de l’image
Partage d'écran sur la tablette, ici on voit la waybar en bas, une fenêtre Discord en fullscreen et une fenêtre Steam par-dessus. Désolé pour la qualité, c'était une photo POC pour un ami plutôt qu'une illustration de journal…

Je n'ai pas pu utiliser la résolution max de ma tablette parce qu'il y a visiblement un petit problème sur l'allocation de surfaces intermédiaires VA. Je n'ai pas cherché à résoudre ce cas parce que c'est très utilisable pour moi dans ces conditions, augmenter la résolution risque de réduire de trop la lisibilité pour moi.

Je n'ai pas proposé la PR en upstream parce que j'ai vibecodé et n'ai aucune maîtrise de Rust comme précisé précédemment. Cependant j'ai ouvert une discussion pour que l'auteur de Moreland soit au courant de ce qui a été fait sur le fork et qu'il puisse librement le rapatrier en upstream s'il estime ça pertinent :
https://github.com/adiimanav/moreland/discussions/5

J'ai décidé de partager avec vous ici pour compléter le journal de Sébastien Rohaut. Je trouve ma solution plus élégante parce qu'elle utilise uniquement les possibilités natives de Wayland, wlroot et VA API. Et elle est franchement simple à mettre en place. En contrepartie ça ne fonctionne qu'avec des GPU AMD et des DE/compositors supportés; en USB… Et X11 n'est évidemment pas supporté.

Et si ça vous intéresse, l'auteur de Moreland a l'air ouvert à la discussion pour intégrer des nouvelles features / corrections.

Désolé pour le côté un peu décousu et destructuré du journal, on est plus proche du billet de blog. Mais j'ose espérer qu'il servira à d'autres :).

  • # Recette labwc

    Posté par  . Évalué à -2 (+1/-0).

    J'ai lu surtout pour le bout labwc. VirtualOutputAdd pose un output nommé, wlr-randr le positionne, USB derrière. Recette courte, collée au compositor.

    Le fork Rust, bof. Une discussion GitHub plutôt qu'une PR vibe-codée collée à l'upstream, ça me va. L'auteur de Moreland n'a qu'à reprendre ou laisser tomber.

    • [^] # Re: Recette labwc

      Posté par  . Évalué à 2 (+0/-0). Dernière modification le 23 septembre 2026 à 12:43.

      Je pensais avoir répondu à ton commentaire mais visiblement j'ai du fermer la fenêtre avant d'envoyer.

      Au final le fork n'aura pas vécu bien longtemps, l'auteur a apprécié la contribution et l'a remonté rapidement en upstream en l'adaptant légèrement pour respecter ses conventions.

      Le repo du fork a été supprimé car devenu caduc.

      La majeure partie des morts l'était déjà de son vivant et le jour venu, ils n'ont pas senti la différence.

  • # A tester

    Posté par  (site web personnel) . Évalué à 3 (+1/-0).

    Merci pour la référence :)

    C'est une avancée, de pouvoir utiliser Wayland. Il faudrait donc que je réinstalle une distrib Wayland pour tester ta solution, mais tu dis que ça ne fonctionne qu'avec des GPU AMD. La doc de Moreland indique juste VA-API :

    A GPU with VA-API encode - AMD, Intel, or NVIDIA via nvidia-vaapi-driver

    Est-ce à dire que tes modifications ne fonctionnent qu'avec AMD ?

    Je vois aussi qu ça ne fonctionne qu'avec Android. L'avantage d'autres solutions est aussi de pouvoir utiliser n'importe quoi (PC, Mac, tablette, sous n'importe quel OS) via un navigateur compatible HTML5. Pourvu que l'auteur en tienne compte dans l'avenir.

    • [^] # Re: A tester

      Posté par  . Évalué à 3 (+1/-0).

      J'ai été très imprécis sur ce point. L'auteur le précise un peu plus bas la compatibilité Intel / Nvidia VA-API est possible mais non testée. Et je n'ai pas de quoi tester non plus dans un de ces contextes.

      J'ai réutilisé le fonctionnement existant de Moreland en l'adaptant pour le fonctionnement spécifique de labwc/wlroots. Ce compositeur ne dispose pas d'API de création à l'exécution mais labwc permet de créer une sortie virtuelle headless. Je branche seulement Moreland a cette sortie virtuelle une fois qu'elle est crée.

      Donc si Moreland et labwc/wlroots fonctionnent avec Nvidia VA-API, mes modifications devraient également être compatibles.

      Je sais que Nvidia a eu longtemps une implémentation de Wayland particulière et j'en ai conclu un peu vite que ce n'était pas compatible. Mon mauvais, c'est à tester.

      Oui en effet, c'est une solution puremment Android pour le coup, bonne remarque. Les solutions que tu as proposé ont effectivement l'avantage d'être plus généralistes. Mais de fait c'est aussi plus difficile d'avoir des performances au plus proche de ce que l'écran de la tablette permet nativement, ce qui était spécifiquement mon point d'intérêt.

      Dans tous les cas, merci pour ton journal qui m'a grandement inspiré et m'a fait sortir de ma procrastination maladive le temps d'une contribution.

      La majeure partie des morts l'était déjà de son vivant et le jour venu, ils n'ont pas senti la différence.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.