web-dev-qa-db-fra.com

Comment changer rapidement d'orientation du moniteur avec une touche de raccourci?

En cherchant si quelqu'un avait déjà posé cette question, j'ai atterri sur ceci pour Windows .

J'aimerais faire quelque chose de similaire (raccourci ou alias de terminal/commande) sous Linux/Ubuntu pour pouvoir basculer rapidement le moniteur externe entre les modes paysage et portrait au lieu de devoir aller à l’affichage le configurant et confirmant la configuration.

Jacob Vlijm a fourni un script Python qui fonctionne. Si vous avez une autre idée, j'aimerais bien la connaître.

Mise à jour : J'ai mis à jour le script de Jacob pour qu'il fonctionne pour deux écrans s'ils sont connectés .

3
user10853

Le script ci-dessous consiste à activer ou désactiver la rotation de l'un de vos écrans:

#!/usr/bin/env python3
import subprocess

# --- set the name of the screen and the rotate direction below
screen = "VGA-1"
rotate = "left"
# ---

matchline = [
    l.split() for l in subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()\
    if l.startswith(screen)
    ][0]
s = matchline[
    matchline.index([s for s in matchline if s.count("+") == 2][0])+1
    ]

rotate = "normal" if s == rotate else rotate
subprocess.call(["xrandr", "--output", screen, "--rotate", rotate])

Comment utiliser

  1. Copiez le script dans un fichier vide, enregistrez-le sous le nom toggle-rotate.py
  2. Dans la section head du script, définissez:

    • le nom de l'écran que vous souhaitez basculer (découvrez en exécutant dans un terminal la commande xrandr)
    • le sens de rotation, soit left ou right (entre guillemets, comme dans l'exemple).

      # --- set the name of the screen and the rotate direction below
      screen = "VGA-1"
      rotate = "left"
      # ---
      
  3. Testez-le par la commande (deux fois, depuis un terminal):

    python3 /path/to/toggle-rotate.py
    
  4. Si tout fonctionne bien, ajoutez-le à une touche de raccourci. Choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:

    python3 /path/to/toggle-rotate.py
    

    à un raccourci de votre choix ...

C'est ça.

Explication

Dans la sortie de la commande xrandr, la rotation actuelle de votre écran (le cas échéant) est mentionnée directement après la position de l'écran, par exemple:

VGA-1 connected 1024x1280+1680+0 left (normal left inverted right x axis y axis) 376mm x 301mm

Dans l'exemple, nous voyons: 1024x1280+1680+0 left. Le script regarde dans la ligne, correspondant à l'écran, mentionné dans la tête du script. if l'écran est pivoté, le script exécute la commande (xrandr):

xrandr --output <screen_name> --rotate normal

sinon , il s'exécute (par exemple):

xrandr --output <screen_name> --rotate left

Pour faire pivoter l'écran dans le sens inverse des aiguilles d'une montre

4
Jacob Vlijm

J'ai utilisé le script de Jacob. Cependant, j'utilise maintenant un adaptateur et je veux donc pouvoir basculer l'orientation si le moniteur est connecté à HDMI ou via l'adaptateur. Pour cela, j'ai modifié le script de Javob et emprunté ne autre fonction qu'il a écrite :

import subprocess

def screens():
    '''
    get connected screens
    '''
    output = [l for l in subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()]
    return [l.split()[0] for l in output if " connected " in l]

# --- set the name of the screen and the rotate direction below
# screen = "HDMI-1" # run "xrandr" to get the screen
rotate = "left" # the desired orientation

if "HDMI-1" in screens():
    screen = "HDMI-1"
Elif "DP-1" in screens():
    screen = "DP-1"
else:
    pass
# ---

# only run if screen is declared (i.e. either HDMI-1 or DP-1 are connected)
if screen:

    matchline = [
        l.split() for l in subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()\
        if l.startswith(screen)
        ][0]
    s = matchline[
        matchline.index([s for s in matchline if s.count("+") == 2][0])+1
        ]

    rotate = "normal" if s == rotate else rotate
    subprocess.call(["xrandr", "--output", screen, "--rotate", rotate])
0
user10853