当连接外接屏幕时,如何自动关闭内部屏幕?

当连接外接屏幕时,如何自动关闭内部屏幕?

我是 Windows 用户,正在加入 Ubuntu 的行列。目前使用的是14.04。我有一台电视,用于观看电影等,通过 HDMI 连接。我想实现以下行为,但我还没有想出办法

  • HDMI 连接时,笔记本电脑上不显示任何内容,只在电视上显示(自动)
  • HDMI 断开后,重新显示我的笔记本电脑

只能通过修改设置来实现这一点,但这非常手动。我遗漏了什么吗?

多谢!

答案1

如果连接了外接屏幕,则自动关闭内部屏幕

这可以通过运行一个小型后台脚本(在启动(登录)时自动启动)轻松完成。

它能做什么

如果您的电视(或任何其他辅助屏幕)已连接,脚本将自动关闭您的内部屏幕。如果您只想让它工作一段时间具体的外接屏幕,请提及。

剧本

#!/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"])
    scr_info1 = scr_info2

如何设置

  1. 将以下脚本复制到一个空文件中,并将其另存为switch_screens.py
  2. 在脚本的头部,设置你的内部的屏幕。要找出答案,请打开终端窗口并运行命令xrandr(未连接外部屏幕)其中带有“已连接”的行在第一个字符串中显示屏幕的名称,看起来像:VGA-1或类似的东西。
  3. 通过打开终端窗口并输入命令进行测试运行:

    python3 /path/to/switch_screens.py
    

    脚本运行时,连接电视,等待内部屏幕关闭并再次断开连接。

  4. 如果一切正常,请将以下命令添加到启动应用程序:打开 Dash > 启动应用程序 > 添加。添加命令:

    /bin/bash -c "sleep 15 && python3 /path/to/switch_screens.py"
    

注销并重新登录。现在,如果连接了外部屏幕,您的内部屏幕将自动关闭。

答案2

Unity 通常会记住您描述的设置。这意味着如果您曾经激活电视,然后停用笔记本电脑屏幕,则下次再次连接电视时应该会这样做。此外,如果您拔下电视插头,它应该会返回到 Laptopsreen。

正如您所说,这种情况没有发生,您可以制作一个小的批处理文件,如果已连接,则激活第二个屏幕并停用笔记本电脑屏幕。这与问题

相关内容