我有一个自定义的 xrandr 脚本,它可以启用我的外接显示器并禁用我的笔记本电脑的显示器。当我断开外接显示器时,我无法启用显示器,因为我的屏幕是空白的。
我希望能够访问我的控制台 tty(ctrl-alt-f1),并触发 xrandr 继续运行(即 xrandr --output eDP1 --auto
)。在我的 tty 中运行该命令时显示“无法打开显示”。有什么提示可以告诉我如何做到这一点吗?
答案1
无需进入控制台,您可以通过添加自定义键盘快捷键来重新启用内部屏幕,从而实现相同的目的。
选择系统设置>键盘>快捷键>自定义快捷键,单击+并将命令添加到您选择的快捷键:
xrandr --output <screenname> --auto
刚刚在我的系统(笔记本电脑,15.10)上测试了它;关闭了我的屏幕并通过键盘快捷键成功重新启用它,运行命令:)
或者
您可以使用编辑版本这个脚本下面的版本(小型背景脚本,每四秒检查一次外部屏幕是否连接)确保您的内部屏幕已打开
#!/usr/bin/env python3
import subprocess
import time
# --- set your internal screen below (the example is my primary screen)
internal = "DVI-I-1"
#---
# don't change anything below
scr_info1 = 0
while True:
time.sleep(4)
# read the current screen setup from xrandr
get_screens = subprocess.check_output("xrandr").decode("utf-8").splitlines()
scr_data = [l for l in get_screens if " connected " in l]
# count the number of connected screens
scr_info2 = len(scr_data)
# if the number of connected screens changes,
# switch off the internal one if there are two screens
if scr_info2 != scr_info1:
if scr_info2 == 2:
ext = [s.split()[0] for s in scr_data if not internal in s][0]
subprocess.Popen(["xrandr", "--output", internal, "--off", "--output", ext, "--auto"])
else:
subprocess.Popen(["xrandr", "--output", internal, "--auto"])
scr_info1 = scr_info2
如何设置
- 将上述脚本复制到一个空文件中,另存为
switch_screens.py
- 在脚本的头部,设置你的内部的屏幕。要找出答案,请打开终端窗口并运行命令
xrandr
(未连接外部屏幕)其中带有“已连接”的行在第一个字符串中显示屏幕的名称,看起来像:VGA-1
或类似的东西。 通过打开终端窗口并输入命令进行测试运行:
python3 /path/to/switch_screens.py
脚本运行时,连接外部屏幕,等待内部屏幕关闭并再次断开连接。
如果一切正常,请将以下命令添加到启动应用程序:打开 Dash > 启动应用程序 > 添加。添加命令:
/bin/bash -c "sleep 15 && python3 /path/to/switch_screens.py"
注销并重新登录。现在,如果连接了外部屏幕,则内部屏幕会自动关闭,如果断开连接,则重新启用它。
该脚本不会给您的系统增加明显的负担。