No description
  • Rust 89.7%
  • Python 8.9%
  • Shell 0.8%
  • CSS 0.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-11-06 14:14:04 +01:00
extras Bordure, ProcessUnique, taskbar des bordures; touche panique (double œ -> bureau 1); style du sélecteur d'espaces de travail 2026-11-06 14:14:04 +01:00
packaging Icône de zone de notification (--tray) et fichiers de packaging (icône, .desktop) 2026-11-06 12:40:19 +01:00
src Bordure, ProcessUnique, taskbar des bordures; touche panique (double œ -> bureau 1); style du sélecteur d'espaces de travail 2026-11-06 14:14:04 +01:00
.gitignore Initial commit: screen2cut, découpe d'écran en moniteurs virtuels (egui + xrandr) 2026-11-06 12:36:40 +01:00
Cargo.lock Icône de zone de notification (--tray) et fichiers de packaging (icône, .desktop) 2026-11-06 12:40:19 +01:00
Cargo.toml Icône de zone de notification (--tray) et fichiers de packaging (icône, .desktop) 2026-11-06 12:40:19 +01:00
install.sh Découpage récursif (arbre), profils, menu systray (interrupteur découpes), restauration au démarrage, tests, install.sh 2026-11-06 13:14:35 +01:00
LICENSE Initial commit: screen2cut, découpe d'écran en moniteurs virtuels (egui + xrandr) 2026-11-06 12:36:40 +01:00
README.md Bordure, ProcessUnique, taskbar des bordures; touche panique (double œ -> bureau 1); style du sélecteur d'espaces de travail 2026-11-06 14:14:04 +01:00

screen2cut

Découpe un écran physique en plusieurs écrans virtuels que Linux (X11) voit comme de vrais moniteurs. Interface graphique simple en Rust (egui), basée sur RandR 1.5 (xrandr --setmonitor).

Fonctionnalités

  • Découpage visuel et récursif : choisis un écran détecté, clique dans une zone pour la couper (verticalement ou horizontalement). Seule la zone cliquée est coupée : tu peux couper l'écran en 2, puis recouper seulement la moitié droite en 2, etc. Glisse les lignes pour ajuster, clic droit pour fusionner, ou applique une grille N×M.
  • Noms dérivés automatiques (DisplayPort-8.1, DisplayPort-8.2…), modifiables, avec écran principal (★).
  • Identifier les écrans : affiche le nom sur chaque écran pendant 3 s.
  • Disposition : étendre (droite/gauche/dessus/dessous), miroir, éteindre, changer la résolution, écran principal.
  • Persistance : config JSON dans ~/.config/screen2cut/config.json + autostart XDG pour tout recréer à l'ouverture de session.
  • Écart entre écrans (curseur) : zone morte où aucune fenêtre ne va, centrée sur chaque ligne de coupe.
  • Bordure de séparation : couleur, épaisseur et style (trait plein, tirets, pointillés, double trait) et couleur unie, arc-en-ciel fixe (rainbow1) ou arc-en-ciel animé avec défilement et effet de respiration (rainbow2), dessinée par des fenêtres transparentes qui laissent passer la souris (screen2cut --borders, lancé par l'icône de notification ; nécessite le compositeur de XFCE).
  • Un panneau XFCE par écran virtuel : copie le panneau de l'écran d'origine (menu démarrer compris) sur chaque morceau, et le restaure à la fusion. Sauvegarde automatique de la config du panneau (xfce4-panel.xml.s2c-backup).
  • Icône de notification (screen2cut --tray) : menu avec interrupteur « désactiver / activer toutes les découpes », liste des profils (par lieu, appliqués automatiquement selon les écrans branchés) et ouverture de l'interface. Elle recrée aussi les écrans virtuels à l'ouverture de session et s'ils disparaissent.
  • Intégration XFCE : voir xfce4-settings-s2c, une version patchée de « Affichage » qui montre et gère ces écrans.
  • Ligne de commande : screen2cut --apply [--dry-run], screen2cut --reset.

Installation

sudo apt install xrandr build-essential   # Debian/Ubuntu
./install.sh      # compile, installe dans /usr/local, lanceur + icône, démarrage auto de l'icône

Ou à la main : cargo build --release && ./target/release/screen2cut.

Note technique (GDK)

GDK (GTK3) ignore un écran virtuel sans sortie placé en fin de liste (il lit outputs[0] sans vérifier). screen2cut crée donc toujours en dernier l'écran qui porte la sortie physique.

Extras (bureau XFCE)

  • extras/s2c-panic-key : touche panique. Un double appui rapide sur la touche œ (en haut à gauche d'un clavier AZERTY) ramène sur le bureau 1. L'appui simple reste utilisable (rejoué après 0,35 s). Nécessite python3-xlib et wmctrl. À mettre dans un autostart.
  • extras/pager.css : sélecteur d'espaces de travail du panneau en numéros, avec bordure et espace actif surligné.

Dépannage

  • Icônes de bureau sur plusieurs écrans (XFCE) : xfdesktop mémorise la position des icônes par « identité » d'écran (EDID), et les écrans virtuels empruntent celle d'un autre écran (voir la note GDK). Arrêter xfdesktop (xfdesktop --quit), retirer de ~/.config/xfce4/desktop/icons.screen0.yaml les configurations dont la géométrie correspond à un écran virtuel, puis le relancer ; avec « icônes sur l'écran principal » elles restent sur l'écran principal.

  • Clignotement très régulier (~10 ms) de la barre de titre de la fenêtre active quand la souris est au bord d'un écran, avec le compositeur de XFCE actif : sur AMD (pilote amdgpu), mettre TearFree à on sur l'écran concerné : xrandr --output DisplayPort-8 --set TearFree on (à mettre dans un autostart pour le rendre permanent). Ce n'est pas lié à screen2cut.

  • screen2cut interroge xrandr avec --current (sans re-détection matérielle des connecteurs) ; seul le bouton « Détecter » force une re-détection.

Limites

  • X11 uniquement (XFCE, i3, KDE/GNOME en session X11…). Wayland ne propose pas d'équivalent.
  • Les moniteurs virtuels disparaissent au redémarrage de session : l'icône de notification (autostart) les recrée, avec xfwm4 prévenu pour qu'il les prenne en compte.
  • xfce4-display-settings ne liste pas les moniteurs virtuels ; panneaux, fenêtres maximisées et plein écran les respectent.

Licence

MIT