logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 18-06-2021 13:39:28

vv222
Administrateur
Distrib. : Debian Sid
(G)UI : sway
Inscription : 18-11-2013
Site Web

Xrandr et écran secondaire

Depuis peu j’ai un deuxième écran connecté à mon PC, que je ne souhaite utiliser que pour certaines activités. Je préfère qu’il soit éteint quand je ne m’en sers pas pour ne pas parasiter mon champ de vision, et surtout pour éviter que des fenêtres ou mon curseur puissent s’y balader.

Je me suis donc bricolé un petit script shell faisant appel à Xrandr pour quelques opérations de base mais dont je ne souhaite pas retenir par cœur les options à passer à xrandr :

#!/bin/sh
set -o errexit

usage() {
  # shellcheck disable=SC2039
  local script_path script_name
  script_path=$(realpath "$0")
  script_name=$(basename "$script_path")
  printf 'Apply default settings:\n'
  printf '%s defaults\n\n' "$script_name"
  printf 'Get the list of screens:\n'
  printf '%s list\n\n' "$script_name"
  printf 'Disable a screen:\n'
  printf '%s disable screen_id\n\n' "$script_name"
  printf 'Enable a screen:\n'
  printf '%s enable screen_id\n\n' "$script_name"
  printf 'Set a screen as primary:\n'
  printf '%s primary screen_id\n\n' "$script_name"
}

SCREEN_ID_PRIMARY='DVI-D-0'
SCREEN_ID_SECONDARY='DVI-D-1'

# Print a list of xrandr options to use for the given screen
# Usage: get_xrandr_options_for_screen screen_id
get_xrandr_options_for_screen() {
  # shellcheck disable=SC2039
  local screen_id xrandr_options
  screen_id="$1"
  case "$screen_id" in
    ("$SCREEN_ID_PRIMARY")
      xrandr_options="--output $screen_id --mode 1280x1024 --rate 75.02 --gamma 1.000:1.000:1.000 --primary"
    ;;
    ("$SCREEN_ID_SECONDARY")
      xrandr_options="--output $screen_id --mode 1680x1050 --rate 59.95 --gamma 1.000:1.000:1.000 --right-of $SCREEN_ID_PRIMARY"
    ;;
  esac
  printf '%s' "$xrandr_options"
}

# Check if a given screen is connected,
# Usage: screen_is_connected screen_id
# Return: 0 if connected, 1 if disconnected
screen_is_connected() {
  # shellcheck disable=SC2039
  local screen_id screen_status
  screen_id="$1"
  screen_status=$(LANG=C xrandr --query | awk "/^${screen_id}/{print \$2}")
  test "$screen_status" = 'connected'
}

# Call xrandr with the default options,
# see get_xrandr_options_for_screen for the default options for each screen
# Usage: set_default_xrandr_options
set_default_xrandr_options() {
  # shellcheck disable=SC2039
  local xrandr_options
  xrandr_options=$(get_xrandr_options_for_screen "$SCREEN_ID_PRIMARY")
  if screen_is_connected "$SCREEN_ID_SECONDARY"; then
    xrandr_options="$xrandr_options $(get_xrandr_options_for_screen "$SCREEN_ID_SECONDARY")"
  fi
  # shellcheck disable=SC2086
  xrandr $xrandr_options
}

set_single_xrandr_options() {
  # shellcheck disable=SC2039
  local xrandr_options
  xrandr_options=$(get_xrandr_options_for_screen "$SCREEN_ID_PRIMARY")
  # shellcheck disable=SC2086
  xrandr $xrandr_options
}

# List the id of all connected screens, one per line
# Usage: list_screens
list_screens() {
  LANG=C xrandr --query | \
    grep '\bconnected\b' | \
    cut --delimiter=' ' --fields=1
}

# Disable the given screen
# Usage: disable_screen screen_id
disable_screen() {
  # shellcheck disable=SC2039
  local screen_id
  screen_id="$1"
  xrandr --output "$screen_id" --off
}

# Enable the given screen
# Usage: enable_screen screen_id
enable_screen() {
  # shellcheck disable=SC2039
  local screen_id
  screen_id="$1"
  # shellcheck disable=SC2046
  xrandr $(get_xrandr_options_for_screen "$screen_id")
}

# Set the given screen as primary
# Usage: primary_screen screen_id
primary_screen() {
  # shellcheck disable=SC2039
  local screen_id
  screen_id="$1"
  # shellcheck disable=SC2046
  xrandr --output "$screen_id" --primary
}

case "$1" in
  ('defaults')
    set_default_xrandr_options
  ;;
  ('single')
    disable_screen "$SCREEN_ID_SECONDARY"
    set_single_xrandr_options
  ;;
  ('list')
    list_screens
  ;;
  ('disable')
    disable_screen "$2"
  ;;
  ('enable')
    enable_screen "$2"
  ;;
  ('primary')
    primary_screen "$2"
  ;;
  (*)
    usage
  ;;
esac

(version à jour)

Vos commentaires sont bien sûr les bienvenus wink


Jouer sous Debian ? Facile !

Ceterum censeo Barum esse delendam

Hors ligne

#2 18-06-2021 14:20:40

vv222
Administrateur
Distrib. : Debian Sid
(G)UI : sway
Inscription : 18-11-2013
Site Web

Re : Xrandr et écran secondaire

Suite aux retours de koollman sur IRC, j’ai renommé deux variables pour rendre le script plus générique :

  • SCREEN_ID_DVISCREEN_ID_PRIMARY

  • SCREEN_ID_HDMISCREEN_ID_SECONDARY


Jouer sous Debian ? Facile !

Ceterum censeo Barum esse delendam

Hors ligne

#3 18-06-2021 15:56:58

anonyme
Invité

Re : Xrandr et écran secondaire

Bonjour
Modifier :
sinon le script trop compliquer pour moi  wink  , pour faire des remarques.
ps: tu peu mettre des commentaires pour les débutants sur ton script , ça risque d'intéresser du monde  smile

si j'ai un peu de temps je regarde pour faire ça (modifier mon poste , écrit des bêtises )

Dernière modification par anonyme (18-06-2021 16:18:13)

#4 18-06-2021 16:32:53

vv222
Administrateur
Distrib. : Debian Sid
(G)UI : sway
Inscription : 18-11-2013
Site Web

Re : Xrandr et écran secondaire

J’ai ajouté au-dessus de chaque fonction un commentaire pour expliquer ce qu’elle fait et la manière dont on l’appelle dans le reste du script. Le cas échéant, je donne aussi ses codes de retour.

Jouer sous Debian ? Facile !

Ceterum censeo Barum esse delendam

Hors ligne

#5 18-06-2021 16:43:07

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : Xrandr et écran secondaire

bonjour vv222  big_smile  big_smile  big_smile

j'admire ta maîtrise des scripts , mais , il sert à quoi au juste ?

comment tu t'en sers ?

amicalement ,

alain.

coyotus.png

Hors ligne

#6 18-06-2021 17:34:50

vv222
Administrateur
Distrib. : Debian Sid
(G)UI : sway
Inscription : 18-11-2013
Site Web

Re : Xrandr et écran secondaire

Si on le lance sans aucun argument, ce script affiche dans la console les différentes actions qu’il peut effectuer :

xrandr_custom

Apply default settings:
xrandr_custom defaults

Get the list of screens:
xrandr_custom list

Disable a screen:
xrandr_custom disable screen_id

Enable a screen:
xrandr_custom enable screen_id

Set a screen as primary:
xrandr_custom primary screen_id



L’idée est de fournir une interface au-dessus de xrandr pour ne pas avoir besoin de connaître par cœur ses différentes options. Quelques exemples :

  • xrandr_custom disable HDMI-A-0 éteint mon écran secondaire connecté en HDMI, et xrandr_custom enable HDMI-A-0 le rallume

  • xrandr_custom primary HDMI-A-0 lui donne le rôle d’écran primaire (celui sur lequel les applications se lancent par défaut), alors que xrandr_custom primary DVI-D-0 rend ce rôle à mon écran principal connecté en DVI

  • xrandr_custom defaults rétablit mes réglages d’affichage par défaut : l’écran principal allumé avec une définition de 1280×1024, et le secondaire allumé avec une définition de 1680×1050 et placé à sa droite


Jouer sous Debian ? Facile !

Ceterum censeo Barum esse delendam

Hors ligne

#7 18-06-2021 17:48:40

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : Xrandr et écran secondaire

ok .

et si tu éteinds les 2 écrans (oubli ou maladresse , plutôt) , y a une sécurité ?

amicalement ,

alain.

coyotus.png

Hors ligne

#8 18-06-2021 17:58:42

phlinux
Membre
Distrib. : Buster
Noyau : 5.10
(G)UI : Openbox (+Rox+Feh)
Inscription : 09-05-2009

Re : Xrandr et écran secondaire

Bjr,

Tu vises sans doute la diffusion internationale, mais les commentaires en français donneraient à ton script des couleurs plus locales; non ?

Pages perso : feh, omegat, udisks, passerelle, schroot vraiment transparent

Hors ligne

#9 18-06-2021 18:16:59

vv222
Administrateur
Distrib. : Debian Sid
(G)UI : sway
Inscription : 18-11-2013
Site Web

Re : Xrandr et écran secondaire

Debian Alain a écrit :

et si tu éteinds les 2 écrans (oubli ou maladresse , plutôt) , y a une sécurité ?


Il y a deux solutions dans ce cas :

  • Je me connecte sur la machine avec SSH pour rallumer l’écran principal, via un de mes PC portables par exemple

  • Je coupe la session graphique et la relance (je peux le faire "en aveugle", j’ai un raccourci clavier pour ça), ce qui appelle automatiquement xrandr_custom defaults et donc allume mon écran principal, ainsi que le secondaire s’il est connecté



---

phlinux a écrit :

Tu vises sans doute la diffusion internationale, mais les commentaires en français donneraient à ton script des couleurs plus locales; non ?


Je travaille toujours en anglais quand je code, parce qu‘en effet c’est souvent à destination de personnes qui ne parlent pas forcément français. Par habitude je le fais aussi quand j’écris des scripts pour ma propre utilisation.


Jouer sous Debian ? Facile !

Ceterum censeo Barum esse delendam

Hors ligne

#10 18-06-2021 18:17:56

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : Xrandr et écran secondaire

essayé avec la version git :

./xrandr-wrapper.sh defaults

warning: output DVI-D-0 not found; ignoring


je possède deux écrans display port

par ailleurs :

./xrandr-wrapper.sh disable DisplayPort-1

éteinds bien l'écran , mais ,  



./xrandr-wrapper.sh enable DisplayPort-1

ne le rallume pas . (obligé de le faire à la main , physiquement)

Dernière modification par Debian Alain (18-06-2021 18:18:52)

Hors ligne

#11 18-06-2021 18:21:14

vv222
Administrateur
Distrib. : Debian Sid
(G)UI : sway
Inscription : 18-11-2013
Site Web

Re : Xrandr et écran secondaire

Ce script n’est pas réutilisable tel quel sur une autre machine que la mienne.

Il faut d’abord que tu identifies tes écrans avec :

xrandr-wrapper.sh list



Et qu’ensuite tu remplaces cette section du script par ce qui convient pour ton installation :

SCREEN_ID_PRIMARY='DVI-D-0'
SCREEN_ID_SECONDARY='HDMI-A-0'

# Print a list of xrandr options to use for the given screen
# Usage: get_xrandr_options_for_screen screen_id
get_xrandr_options_for_screen() {
    # shellcheck disable=SC2039
    local screen_id xrandr_options
    screen_id="$1"
    case "$screen_id" in
        ("$SCREEN_ID_PRIMARY")
            xrandr_options="--output $screen_id --mode 1280x1024 --rate 75.02 --primary"
        ;;
        ("$SCREEN_ID_SECONDARY")
            xrandr_options="--output $screen_id --mode 1680x1050 --rate 59.95 --right-of $SCREEN_ID_PRIMARY"
        ;;
    esac
    printf '%s' "$xrandr_options"
}


Jouer sous Debian ? Facile !

Ceterum censeo Barum esse delendam

Hors ligne

#12 18-06-2021 18:33:11

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : Xrandr et écran secondaire

big_smile  big_smile  big_smile

script adapté (id écrans et résolutions) , fonctionne parfaitement .

merci vv222

amicalement ,

alain.

coyotus.png

merci.gif

p.s.: à quoi correspond l'option

--rate 75.02

par exemple ?



c'est  bien çà ?

man xrandr

       --rate fréq
              Cela marque une préférence pour les fréquences de  rafraichisse‐
              ment proches de la valeur spécifiée, quand de nombreux modes ont
              le même nom. Cela sélectionnera la fréquence de rafraichissement
              qui est la plus proche.

Dernière modification par Debian Alain (18-06-2021 18:39:11)

Hors ligne

#13 18-06-2021 21:05:30

vv222
Administrateur
Distrib. : Debian Sid
(G)UI : sway
Inscription : 18-11-2013
Site Web

Re : Xrandr et écran secondaire

C’est bien ça, c’est la fréquence de rafraîchissement de l’écran. Dans mon cas ~75Hz pour l’écran principal, et ~60Hz pour le secondaire.

Jouer sous Debian ? Facile !

Ceterum censeo Barum esse delendam

Hors ligne

#14 19-06-2021 12:08:40

anonyme
Invité

Re : Xrandr et écran secondaire

Bonjour
quelqu'un a regarder ce qui se passe dans le log de X , lors de l'utilisation du script (et ou xrandr)
merci pour les explications smile 
ps: pas trop le temps et la motivation pour tester

#15 19-06-2021 12:26:19

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Hors ligne

#16 19-06-2021 13:55:56

vv222
Administrateur
Distrib. : Debian Sid
(G)UI : sway
Inscription : 18-11-2013
Site Web

Re : Xrandr et écran secondaire

anonyme a écrit :

quelqu'un a regarder ce qui se passe dans le log de X , lors de l'utilisation du script (et ou xrandr)



Tu fais référence à quelque chose en particulier ? Je ne vois rien qui sorte de l’ordinaire dans mes logs.


Jouer sous Debian ? Facile !

Ceterum censeo Barum esse delendam

Hors ligne

#17 20-06-2021 04:53:05

anonyme
Invité

Re : Xrandr et écran secondaire

en fin du log si des choses bougent, par exemple une nouvelle souris usb , un écran supplémentaire etc .........
par exemple éteindre l'écran (un seul ) rien ne bouge chez moi sur le log.
le plus simple c'est que je teste le script (adapté a ma config )  roll

Pied de page des forums