Рейтинг:1

Автоматически уменьшать разрешение до разрешения самого маленького монитора при подключении нового монитора?

флаг au

У меня есть монитор и телевизор, которым я иногда пользуюсь. Монитор 4к, используется в разрешении 2560х1440 - за исключением случаев, когда телевизор подключен Мне нужно вручную уменьшить разрешение до 1080, а потом вручную выставить обратно 1440 после отключения телевизора.

вывод xrandr выглядит так:

DVI-I-1 подключен (нормальный левый перевернутый правый по оси x по оси y)
   1920x1080 60,00 + 59,94 23,98 60,05 60,00  
   1440x480 60,05  
   1280x720 60,00 59,94  
   720x480 59,94  
   640x480 59,93  
Подключенный HDMI-0 первичный 2560x1440+0+0 (нормальный левый, перевернутый вправо, ось x, ось y) 597 мм x 336 мм
   3840x2160 60,00 + 59,94 29,97 25,00 23,98  
   2560x1440 59,95* 
   2048x1280 60,00  
   1920x1080 60,00 59,94 50,00 25,00 23,98 60,00 50,04  
   1600x1200 60,00  
   1600x900 60,00  
   1280x1024 75,02 60,02  
   1280x720 59,94  
   1152x864 75,00  
   1024x768 75,03 60,00  
   800x600 75,00 60,32  
   720x576 50,00  
   720x480 59,94  
   640x480 75,00 59,94 59,93  
Jacob Vlijm avatar
флаг by
Определите слишком много. Без скриптинга? Нет.
francois P avatar
флаг it
Я также думаю, что вы не можете сделать это без сценария, пока обнаружение не будет автоматически использовать лучшее разрешение для всех подключенных мониторов.
Slbox avatar
флаг au
@JacobVlijm достаточно честно - отредактировал текст сообщения! Открыт для любых предложений.
Jacob Vlijm avatar
флаг by
Вы на x или wayland? Квин, кажется, делает и то, и другое.
Slbox avatar
флаг au
Использование `х`. Можете ли вы объяснить, как добиться этого с помощью `kwin`?
Jacob Vlijm avatar
флаг by
Правильно. Можете ли вы опубликовать на свой вопрос вывод xrandr? нам нужно имя экрана. Также, пожалуйста, вывод с прикрепленным/установленным внешним экраном
Slbox avatar
флаг au
@JacobVlijm готово!
Jacob Vlijm avatar
флаг by
... Так оно и есть. Скрипт пробовали? Нужна помощь?
Рейтинг:1
флаг by

Изменить разрешение сигнала

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

В сценарии

#!/usr/bin/env python3
импорт ги
gi.require_version("GDK", "3.0")
gi.require_version("Gtk", "3.0")
из gi.repository импортировать Gtk, Gdk
подпроцесс импорта

triggermon = "DVI-I-1" # если подключен этот, уменьшите разрешение
tochange = "HDMI-0" # монитор для понижения разрешения
lowres = "1920x1080" # низкое разрешение
highres = "3840x2160" # разрешение по умолчанию


класс WatchOut:
    защита __init__(сам):
        self.gdkdsp = Gdk.Display.get_default()
        # использовать сигналы подключения/отключения
        self.gdkdsp.connect("monitor_added", self.act_onchange)
        self.gdkdsp.connect("monitor_removed", self.act_onchange)
        # убедиться, что начальная конфигурация верна
        self.act_onchange()
        # нам нужен поток gtk для использования сигналов
        Gtk.main()

    def act_onchange (я, * аргументы):
        # давайте по умолчанию в высоком разрешении
        curr_res = высокое разрешение
        # подключить n-мониторов, понизить разрешение, если триггермон подключен
        n_mons = self.gdkdsp.get_n_monitors()
        для n в [n для n в диапазоне (self.gdkdsp.get_n_monitors())]:
            mon_name = self.gdkdsp.get_monitor(n).get_model()
            если имя_мона == триггермон:
                curr_res = низкое разрешение
        # установить разрешение
        подпроцесс.Popen([
            "xrandr", "--output", tochange, "--mode", curr_res
        ])               
        
Осторожно()

Настраивать

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

  • Имена мониторов находятся в заголовке скрипта, поэтому упомянутые вами разрешения измените их при необходимости.

  • Тест-запустите его в окне терминала.

      /путь/к/actonmonitor.py
    
  • Посмотрите, все ли работает как надо.

  • Добавьте его в свои приложения для запуска, если хотите.

Н.Б.

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

Slbox avatar
флаг au
Я еще не смог попробовать это, так как проблема _частично_ решена в Plasma 5.23.1, и это стало для меня гораздо менее отягчающим. Хотя выглядит многообещающе! Я предварительно принял ответ, пока у меня не будет возможности попробовать его. Спасибо большое за помощь.

Ответить или комментировать

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