Активировать дисплей через консольный tty?

Активировать дисплей через консольный tty?

У меня есть пользовательский скрипт 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

Как настроить

  1. Скопируйте приведенный выше скрипт в пустой файл, сохраните его какswitch_screens.py
  2. В разделе заголовка вашего скрипта задайте имя вашеговнутреннийэкран. Чтобы узнать, откройте окно терминала и выполните команду xrandr(внешний экран не подключен) Строка с «подключен» в ней показывает имя вашего экрана в первой строке, выглядящее как: 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"
    

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

Скрипт не добавляет никакой заметной нагрузки на вашу систему.

Связанный контент