web-dev-qa-db-fra.com

Comment lister les écrans actifs (en ligne de commande)?

xrandr -q me donne une liste d'écrans connectés, mais comment puis-je savoir (avec script) si un écran est actuellement actif?

Contexte: je voudrais écrire un script pour basculer un affichage. S'il est actif, il devrait être désactivé, sinon, activé.

Remarque: xrandr -q fournit ces informations car les modes actifs sont marqués d'un *, mais il est difficile d'extraire ces informations dans un script bash.

3
innerand

La résolution et le numéro de décalage des affichages actifs sont indiqués dans la ligne d'identification de la sortie xrandr. Voici ce que je veux dire:

$ xrandr | grep connected                                    
eDP1 connected primary 1366x768+1280+256 (normal left inverted right x axis y axis) 345mm x 194mm
DP1 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
VGA1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 340mm x 270mm
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

Dans la sortie, vous pouvez voir que le moniteur intégré de mon ordinateur portable et le VGA1 sont tous deux connectés et ont une résolution (dans le cas de l'écran intégré eDP1, il s'agit de 1366x768). Ainsi, la tâche devient simplement un traitement de texte de la sortie. Pour cela, j'ai écrit une petite fonction que vous pouvez utiliser dans vos scripts ou ~/.bashrc:

get_active_monitors()
{
    xrandr | awk '/\ connected/ && /[[:digit:]]x[[:digit:]].*+/{print $1}'
}

Voici les tests effectués:

Avec moniteur VGA

enter image description here

Avec moniteur VGA désactivé

enter image description here

1
Sergiy Kolodyazhnyy

Obtenez tous les écrans connectés en utilisant

 xrandr -q

Ensuite, vous pouvez créer une variable de tous les écrans connectés comme

Display1=VGA1

etc

puis utilisez le script

 #!/bin/bash

 if (xrandr | grep "$DISPLAY1 connected"); then
    if (ls | grep status_flag); then  
        xrandr --output $DISPLAY1 --off
        rm status_flag
    else
        xrandr --output $DISPLAY1 --auto
        touch status_flag
    fi
 fi

L'exécution de ce script pour la première fois allumera le moniteur sans savoir si le moniteur est allumé ou éteint, et à partir de la seconde fois, il s'éteindra si le moniteur est allumé et s'allumera s'il est éteint.

0
s.m

avec xrandr dans la liste de résolutions, la résolution d'affichage active doit être précédée d'un astérisque. S'il n'est pas présent, l'affichage n'est pas actif.

0
Sharkytrs