![连接新显示器时是否自动降低分辨率至最小显示器的分辨率?](https://linux22.com/image/941425/%E8%BF%9E%E6%8E%A5%E6%96%B0%E6%98%BE%E7%A4%BA%E5%99%A8%E6%97%B6%E6%98%AF%E5%90%A6%E8%87%AA%E5%8A%A8%E9%99%8D%E4%BD%8E%E5%88%86%E8%BE%A8%E7%8E%87%E8%87%B3%E6%9C%80%E5%B0%8F%E6%98%BE%E7%A4%BA%E5%99%A8%E7%9A%84%E5%88%86%E8%BE%A8%E7%8E%87%EF%BC%9F.png)
我有一台显示器和一台电视,有时会用到。显示器是 4k 的,分辨率为 2560x1440 - 除非连接电视时,我需要手动将分辨率降低到 1080,然后在断开电视连接后手动将其设置回 1440。
xrandr 输出如下所示:
DVI-I-1 connected (normal left inverted right x axis y axis)
1920x1080 60.00 + 59.94 23.98 60.05 60.00
1440x480 60.05
1280x720 60.00 59.94
720x480 59.94
640x480 59.93
HDMI-0 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 597mm x 336mm
3840x2160 60.00 + 59.94 29.97 25.00 23.98
2560x1440 59.95*
2048x1280 60.00
1920x1080 60.00 59.94 50.00 25.00 23.98 60.00 50.04
1600x1200 60.00
1600x900 60.00
1280x1024 75.02 60.02
1280x720 59.94
1152x864 75.00
1024x768 75.03 60.00
800x600 75.00 60.32
720x576 50.00
720x480 59.94
640x480 75.00 59.94 59.93
答案1
改变信号的分辨率
在...的帮助下吉德克,我们可以对多个信号采取行动,例如连接/断开监视器。如果我们同时连接monitor-added
和monitor-removed
信号(显示)根据所连接的电视自动更新显示器分辨率,我们就完成了。
在脚本中
#!/usr/bin/env python3
import gi
gi.require_version("Gdk", "3.0")
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk
import subprocess
triggermon = "DVI-I-1" # if this one is connected, reduce resolution
tochange = "HDMI-0" # the monitor to lower resolution on
lowres = "1920x1080" # the low resolution
highres = "3840x2160" # the default resolution
class WatchOut:
def __init__(self):
self.gdkdsp = Gdk.Display.get_default()
# use connect/disconnect signales
self.gdkdsp.connect("monitor_added", self.act_onchange)
self.gdkdsp.connect("monitor_removed", self.act_onchange)
# make sure initial configuration is correct
self.act_onchange()
# we need a gtk thread to use the signals
Gtk.main()
def act_onchange(self, *args):
# let's default to highres
curr_res = highres
# get attached n-monitors, lower res if triggermon is connected
n_mons = self.gdkdsp.get_n_monitors()
for n in [n for n in range(self.gdkdsp.get_n_monitors())]:
mon_name = self.gdkdsp.get_monitor(n).get_model()
if mon_name == triggermon:
curr_res = lowres
# set resolution
subprocess.Popen([
"xrandr", "--output", tochange, "--mode", curr_res
])
WatchOut()
设置
将脚本复制到一个空文件中,另存
actonmonitor.py
为使其可执行(如果您运行它但没有明确调用解释器)。监视器名称位于脚本的头部,因此您提到的分辨率,如果需要,请更改它们。
在终端窗口中测试运行它。
/path/to/actonmonitor.py
看看一切是否正常运行。
如果您愿意,可以将其添加到您的启动应用程序中。
注意:
辅助显示器在显示器布局中的确切位置不在 xrandr 的(您的)输出中。如果位置很重要,您可能需要xrandr
向脚本添加额外的命令。