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

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

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

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

3 ответа

Установите разрешение в зависимости от наличия (конкретного) экрана экрана

Ниже двух параметров:

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

Вариант 1; shortcut

#!/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

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

Установить разрешение экрана и экран переключения (автоматическое обнаружение второго экрана) с помощью сочетания клавиш Заменить в (текущие настройки предназначены только для моей тестовой настройки). Запустите фоновый скрипт, чтобы автоматически отключить главный экран и изменить разрешение
2
ответ дан 22 May 2018 в 23:13
  • 1
    Большое вам спасибо за скрипты. Две заметки: при запуске фонового скрипта для запуска xrandr есть некоторые накладные расходы для получения экранов. Каждый раз, когда он запускается, мышь немного отстает, и система тоже работает. Не знаю, есть ли решение для этого, так как это влияет на удобство использования скрипта. Другое дело, что иногда, когда я запускаю скрипт, он вылетает с этим выходом: pastebin.com/xUkrDPcK Это произошло дважды. – Lawand 28 April 2017 в 15:19
  • 2
    То же самое происходит и с первым скриптом – Lawand 28 April 2017 в 15:24
  • 3
    Привет @Lawand исправил ошибки в фоновом режиме. Похоже, что мышиные хиккипы связаны с незначительной несовместимостью с видеокартой. Это не происходит в моей 10-летней системе. Все еще ищу альтернативу получения информации о мониторе, Gtk / Gdk пока не работает. – Jacob Vlijm 29 April 2017 в 00:19
  • 4
    @Lawand wait, я могу обнаружить изменения настроек экрана с помощью wmctrl -d, сохранить xrandr вне цикла. Будет ли сообщение, если я сделаю свои налоги :) – Jacob Vlijm 29 April 2017 в 13:17

Установите разрешение в зависимости от наличия (конкретного) экрана экрана

Ниже двух параметров:

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

Вариант 1; shortcut

#!/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

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

Установить разрешение экрана и экран переключения (автоматическое обнаружение второго экрана) с помощью сочетания клавиш Заменить в (текущие настройки предназначены только для моей тестовой настройки). Запустите фоновый скрипт, чтобы автоматически отключить главный экран и изменить разрешение
2
ответ дан 18 July 2018 в 14:16

Установите разрешение в зависимости от наличия (конкретного) экрана экрана

Ниже двух параметров:

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

Вариант 1; shortcut

#!/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

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

Установить разрешение экрана и экран переключения (автоматическое обнаружение второго экрана) с помощью сочетания клавиш Заменить в (текущие настройки предназначены только для моей тестовой настройки). Запустите фоновый скрипт, чтобы автоматически отключить главный экран и изменить разрешение
2
ответ дан 24 July 2018 в 20:21

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

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