Как я могу быстро переключить ориентацию монитора с сочетанием клавиш?

При взгляде, если кто-то задал этот вопрос прежде, я приземлился на это для Windows.

Я хотел бы сделать что-то подобное (ярлык или терминальный псевдоним/команда) на Linux/Ubuntu, чтобы смочь быстро переключить внешний монитор между средой и режимом портрета вместо того, чтобы иметь необходимость перейти к установке Displays он и подтверждению конфигурации.

Jacob Vlijm предоставил сценарий Python, который работает. Если у Вас есть другая идея, я хотел бы знать об этом.

Обновление: Я обновил сценарий Jacob для работы на два экрана, если они соединены.

3
задан 8 March 2018 в 03:24

2 ответа

Сценарий ниже предназначен для переключения поворота любого из ваших экранов:

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

Как использовать

  1. Копировать сценарий в пустой файл, сохраните его как toggle-rotate.py
  2. В разделе заголовка сценария установите:

    • имя экрана, который вы хотите переключить (узнайте, запустив в терминале команда xrandr )
    • направление поворота: влево или вправо (в кавычках, как в примере).

       #  --- установите имя экрана и направление поворота ниже
      screen = "VGA-1"
      rotate = "влево"
       # ---
       
  3. Протестируйте - запустите его командой (два раза, с терминала):

     python3 /path/to/toggle-rotate.py
     
  4. Если все работает нормально, добавьте его в горячую клавишу. Выберите: Системные настройки> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команду:

     python3 /path/to/toggle-rotate.py
     

    на ярлык по вашему выбору ...

Вот и все.

Объяснение

В выходных данных команды xrandr текущий поворот экрана (если есть) упоминается непосредственно после положения экрана, например:

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

В этом примере мы см .: 1024x1280 + 1680 + 0 слева . Скрипт смотрит в строку, соответствующую экрану, упомянутому в заголовке скрипта. если экран повернут, сценарий запускает команду ( xrandr ):

xrandr --output <screen_name> --rotate normal

если не , запускается (например):

xrandr --output <screen_name> --rotate left

Чтобы повернуть экран против часовой стрелки

4
ответ дан 1 December 2019 в 15:55

Я использовал сценарий Джейкоба. Однако теперь я использую адаптер, поэтому я хочу иметь возможность переключать ориентацию независимо от того, подключен ли монитор к HDMI или через адаптер. Для этого я модифицировал сценарий Явоба и позаимствовал другую функцию, которую он написал :

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
ответ дан 1 December 2019 в 15:55

Другие вопросы по тегам:

Похожие вопросы: