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

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

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

2
задан 27 April 2017 в 19:10

1 ответ

Разрешение набора, в зависимости от присутствия (определенного) приложенного экрана

Ниже двух опций:

  1. разрешение экрана Набора и экран переключателя (автоматическое обнаружение второго экрана) сочетанием клавиш
  2. Запущенный фоновый скрипт, чтобы автоматически выключить основной экран и изменить разрешение

Опция 1; ярлык

#!/usr/bin/env python3
import subprocess
import time

# set the default screen
default = "DVI-I-1"
# set the specific external screen
external = "VGA-1"
# set the resolution of the single screen setup
singleres = "1680x1050"
# set the resolution of the specific external screeen
extrares = "1280x1024"

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8")

def run(cmd):
    subprocess.call(cmd)

def get_screens():
    return [l.split()[0] for l in get("xrandr").splitlines() if " connected" in l]

def set_screen(n_scr, screens):
    if n_scr == 1:
        run(["xrandr", "--output", default, "--auto"])
        run(["xrandr", "-s", singleres])
        print("1 screen")
    elif all([n_scr == 2, external in screens]):    
        run(["xrandr", "--output", default, "--off"])
        run(["xrandr", "-s", extrares])
        print("2 screens")

screens = get_screens()
n_scr2 = len(screens)
set_screen(n_scr2, screens)

Опция 2; фоновая версия

#!/usr/bin/env python3
import subprocess
import time

# set the default screen
default = "DVI-I-1"
# set the specific external screen
external = "VGA-1"
# set the resolution of the single screen setup
singleres = "1680x1050"
# set the resolution of the specific external screeen
extrares = "1280x1024"

def get(cmd):
    try:
        return subprocess.check_output(cmd).decode("utf-8")
    except subprocess.CalledProcessError:
        pass

def run(cmd):
    subprocess.call(cmd)

def get_screens(scrdata):
    return [l.split()[0] for l in scrdata.splitlines() if " connected" in l]

def set_screen(n_scr, screens):
    if n_scr == 1:
        run(["xrandr", "--output", default, "--auto"])
        run(["xrandr", "-s", singleres])
        print("1 screen")
    elif all([n_scr == 2, external in screens]):    
        run(["xrandr", "--output", default, "--off"])
        run(["xrandr", "-s", extrares])
        print("2 screens")

n_scr1 = None

while True:
    time.sleep(4)
    scrdata = get("xrandr")
    if scrdata:
        screens = get_screens(scrdata)
        n_scr2 = len(screens)
        if n_scr2 != n_scr1:
            set_screen(n_scr2, screens)
        n_scr1 = n_scr2

, Как использовать

  1. Копия любой из сценариев выше в пустой файл, сохраняет его как set_screens.py
  2. Замена в главном разделе сценария значения для:

    # set the default screen
    default = "DVI-I-1"
    # set the specific external screen
    external = "VGA-1"
    # set the resolution of the single screen setup
    singleres = "1680x1050"
    # set the resolution of the specific external screeen
    extrares = "1280x1024"
    

    (текущие настройки только для моей тестовой установки)

  3. Тестовый прогон и применяет сценарий:

    • , если Вы используете опцию 1, ярлык :

      Открывают терминал, запускают скрипт впоследствии с и без внешнего экрана, с командой:

      python3 /path/to/set_screens.py
      

      Это должно установить экраны, как предназначено.

      Впоследствии добавляют, если все хорошо работает, сценарий к ярлыку: Выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду:

      python3 /path/to/set_screens.py
      
    • , если Вы используете опцию 2, фоновый сценарий :

      Открывают терминал, запускают скрипт с командой:

      python3 /path/to/set_screens.py
      

      и подключение / разъединяют внешний монитор. Это должно изменить разрешение и включить / от Вашего монитора по умолчанию, как предназначено.

      Впоследствии добавляют, если все хорошо работает, сценарий для Запущения Приложений: Тире> Приложения Запуска> Добавляет. Добавьте команду:

      /bin/bash -c "sleep 10 && python3 /path/to/set_screens.py"
      
1
ответ дан 2 December 2019 в 04:49

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

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