在查看是否有人问过这个问题时,我发现对于 Windows。
我想在 Linux/Ubuntu 上做一些类似的事情(快捷方式或终端别名/命令),以便能够快速在横向和纵向模式之间切换外接显示器,而不必去显示器设置并确认配置。
Jacob Vlijm 提供了Python 脚本有效。如果您有其他想法,我很乐意了解。
更新:我已经更新了 Jacob 的脚本,以便能够工作两个屏幕(如果已连接)。
答案1
下面的脚本用于切换任一屏幕的旋转:
#!/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
逆时针旋转屏幕
答案2
我一直在使用 Jacob 的脚本。但是我现在正在使用适配器,因此我希望能够切换显示器是连接到 HDMI 还是通过适配器连接的方向。为此,我修改了 Javob 的脚本并借用了他写的另一个函数:
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])