Como posso rapidamente alternar a orientação do monitor com uma tecla de atalho?

3

Enquanto procurava alguém antes de fazer essa pergunta, acessei isso para o Windows .

Gostaria de fazer algo semelhante (atalho ou terminal alias / comando) no Linux / Ubuntu para poder alternar rapidamente o monitor externo entre o modo paisagem e retrato em vez de ter que ir para Exibições definindo-o e confirmando a configuração .

Jacob Vlijm forneceu um script em Python que funciona. Se você tiver outra ideia, eu adoraria saber sobre isso.

Atualização : atualizei o script do Jacob para funcionar para duas telas, se elas estiverem conectadas .

    
por user10853 20.02.2016 / 20:16

2 respostas

4

O script abaixo é para alternar a rotação de qualquer uma das suas telas:

#!/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])

Como usar

  1. Copie o script em um arquivo vazio, salve-o como toggle-rotate.py
  2. Na seção principal do script, defina:

    • o nome da tela que você gostaria de alternar (descubra executando em um terminal o comando xrandr )
    • a direção de rotação, left ou right (entre aspas, como no exemplo).

      # --- set the name of the screen and the rotate direction below
      screen = "VGA-1"
      rotate = "left"
      # ---
      
  3. Teste- execute-o pelo comando (duas vezes, a partir de um terminal):

    python3 /path/to/toggle-rotate.py
    
  4. Se tudo funcionar bem, adicione-o a uma tecla de atalho. Escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:

    python3 /path/to/toggle-rotate.py
    

    para um atalho de sua escolha ...

É isso.

Explicação

Na saída do comando xrandr , a rotação atual da sua tela (se houver) é mencionada diretamente após a posição da tela, por exemplo:

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

No exemplo, vemos: 1024x1280+1680+0 left . O script examina a linha, correspondente à tela, mencionada no cabeçalho do script. se a tela for girada, o script executará o comando ( xrandr ):

xrandr --output <screen_name> --rotate normal

se não , ele é executado (por exemplo):

xrandr --output <screen_name> --rotate left

Para girar a tela no sentido anti-horário

    
por Jacob Vlijm 20.02.2016 / 21:13
0

Eu tenho usado o script de Jacob. No entanto, agora estou usando um adaptador, por isso quero poder alternar a orientação se o monitor estiver conectado a HDMI ou através do adaptador. Para isso eu modifiquei o script do Javob e pedi emprestada outra função que ele escreveu :

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])
    
por user10853 07.03.2018 / 23:21