При взгляде, если кто-то задал этот вопрос прежде, я приземлился на это для Windows.
Я хотел бы сделать что-то подобное (ярлык или терминальный псевдоним/команда) на Linux/Ubuntu, чтобы смочь быстро переключить внешний монитор между средой и режимом портрета вместо того, чтобы иметь необходимость перейти к установке Displays он и подтверждению конфигурации.
Jacob Vlijm предоставил сценарий Python, который работает. Если у Вас есть другая идея, я хотел бы знать об этом.
Обновление: Я обновил сценарий Jacob для работы на два экрана, если они соединены.
Сценарий ниже предназначен для переключения поворота любого из ваших экранов:
#!/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
) направление поворота: влево
или вправо
(в кавычках, как в примере).
# --- установите имя экрана и направление поворота ниже
screen = "VGA-1"
rotate = "влево"
# ---
Протестируйте - запустите его командой (два раза, с терминала):
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 слева
. Скрипт смотрит в строку, соответствующую экрану, упомянутому в заголовке скрипта. если экран повернут, сценарий запускает команду ( 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])