![Активировать дисплей через консольный tty?](https://rvso.com/image/1087099/%D0%90%D0%BA%D1%82%D0%B8%D0%B2%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B4%D0%B8%D1%81%D0%BF%D0%BB%D0%B5%D0%B9%20%D1%87%D0%B5%D1%80%D0%B5%D0%B7%20%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9%20tty%3F.png)
У меня есть пользовательский скрипт 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
Во время работы скрипта подключите внешний экран, дождитесь отключения внутреннего экрана и снова отключите его.
Если все работает нормально, добавьте следующую команду в Startup Applications: откройте Dash > Startup Applications > Add. Добавьте команду:
/bin/bash -c "sleep 15 && python3 /path/to/switch_screens.py"
Выйдите из системы и войдите снова. Теперь ваш внутренний экран автоматически отключается при подключении внешнего экрана и снова включается при отключении.
Скрипт не добавляет никакой заметной нагрузки на вашу систему.