Как я могу автоматически отключить внутренний экран, когда подключен внешний экран?

Пользователь Windows здесь, прыгает на поезд Ubuntu. В настоящее время использую 14.04. У меня есть телевизор, который я использую для просмотра фильмов и тому подобное, подключенный через HDMI. Я хотел бы выполнить следующее поведение, но я еще не понял

  • При подключении через HDMI на моем ноутбуке ничего не отображается, просто отображается на телевизоре (автоматически)
  • При отключении HDMI отобразите обратно мой ноутбук

Только настраивая параметры, я могу добиться этого, но это чрезвычайно вручную. Я что-то упустил?

Большое спасибо!

4
задан 9 March 2016 в 18:47

2 ответа

Автоматически выключить ваш внутренний экран, если подключен внешний экран

Это можно легко сделать, запустив небольшой фоновый скрипт (запускается автоматически при запуске (входе в систему).

Что он делает

Скрипт автоматически отключит ваш внутренний экран, если ваш телевизор (или любой другой дополнительный экран) подключен. Если вы хотите, чтобы он работал только для определенного внешнего экрана, укажите.

Скрипт

#!/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. В разделе заголовка вашего скрипта укажите имя вашего внутреннего [116 8951] экран. Чтобы узнать это, откройте окно терминала и выполните команду xrandr (внешний экран не подключен). В строке со словом «connected» в первой строке отображается имя вашего экрана, например: VGA-1 или что-то в этом роде.
  3. Протестируйте - запустите его, открыв окно терминала и набрав команду:

     python3 /path/to/switch_screens.py
     

    Пока выполняется сценарий, подключите телевизор, подождите, пока внутренний экран выключится и снова отключится.

  4. Если все работает нормально, добавьте команду ниже в Startup Applications: откройте Dash> Startup Applications> Add. Добавьте команду:

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

Выйдите из системы и снова войдите. Теперь ваш внутренний экран автоматически отключается, если подключен внешний экран.

6
ответ дан 10 March 2016 в 04:47
  • 1
    Я получил ту же проблему на Сервере Ubuntu 18.04. Сообщение об ошибке является тем же кроме него, имеет -lts в конце. В моем случае, кажется, не было никакой ошибки конфигурации. Сообщение об ошибке обнаружилось после того, как система работала в течение многих недель без любых проблем. Таким образом, по-видимому, сообщение об ошибке может обнаружиться спонтанно. Слишком плохо этот вопрос закрывается как дубликат, так как Ваш ответ ясно показывает, что плохой вывод может сохраниться, даже если ни одна из проблем, упомянутых в воображаемом дубликате, не присутствует. – kasperd 25 February 2019 в 09:35

Обычно Unity запоминает описанные вами настройки. Это означает, что если вы один раз активируете свой телевизор, а затем отключите экран ноутбука, это должно произойти при следующем подключении телевизора. Также, если вы отключите телевизор от сети, он должен вернуться к экрану ноутбука.

Как вы говорите, этого не произошло, вы можете создать небольшой командный файл, который активирует второй экран, если он подключен, и деактивирует экран ноутбука. Это связано с тем вопросом

1
ответ дан 10 March 2016 в 04:47
  • 1
    Спасибо @SergiyKolodyazhnyy за указание, что:) – Bilesh Ganguly 28 May 2017 в 05:50

Другие вопросы по тегам:

Похожие вопросы: