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.
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
Avec moniteur VGA désactivé
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.
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.