Как быстро переключить ориентацию монитора с помощью сочетания клавиш?
Посмотрев, задавал ли кто-нибудь этот вопрос раньше, я нашел это для Windows.
Я хотел бы сделать что-то подобное (ярлык или псевдоним / команда терминала) в Linux/Ubuntu, чтобы можно было быстро переключать внешний монитор между альбомным и портретным режимами вместо того, чтобы переходить к дисплеям, настраивая его и подтверждая конфигурацию.
Джейкоб Влейм предоставил скрипт на Python, который работает. Если у вас есть другая идея, я бы хотел узнать об этом.
Обновление: я обновил сценарий Джейкоба, чтобы он работал на двух экранах, если они подключены.
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])
Как пользоваться
- Скопируйте скрипт в пустой файл, сохраните его как
toggle-rotate.py
В разделе заголовка скрипта установите:
- название экрана, который вы хотите переключить (выясните, запустив в терминале команду
xrandr
) направление вращения, либо
left
или жеright
(между кавычками, как в примере).# --- set the name of the screen and the rotate direction below screen = "VGA-1" rotate = "left" # ---
- название экрана, который вы хотите переключить (выясните, запустив в терминале команду
Выполните тестирование по команде (два раза из терминала):
python3 /path/to/toggle-rotate.py
Если все работает нормально, добавьте его к сочетанию клавиш. Выберите: "Системные настройки" > "Клавиатура" > "Ярлыки" > "Пользовательские ярлыки". Нажмите "+" и добавьте команду:
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 left
, Сценарий просматривает строку, соответствующую экрану, упомянутому в заголовке сценария. если экран поворачивается, скрипт запускаетxrandr
) команда:
xrandr --output <screen_name> --rotate normal
если нет, он запускается (например):
xrandr --output <screen_name> --rotate left
Поворот экрана против часовой стрелки
Я использовал сценарий Джейкоба. Однако сейчас я использую адаптер, поэтому хочу иметь возможность переключать ориентацию независимо от того, подключен ли монитор к 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])