Командная строка Ubuntu для изменения входного источника на мониторе?

У меня есть два ПК, подключенные к монитору Dell U3415W, один с ubuntu 14.04 LTS OS с входом HDMI и другим с окнами 10 с входом DP. То, что я хочу сделать, переключиться между этими двумя входными источниками, не используя на кнопках меню окна (OSD). Для окон существует менеджер по оформлению лощины, который делает переключение от DP до входа HDMI из командной строки. Но я не мог найти путь или контролировать инструмент для переключения от HDMI до входа DP на человечности с помощью командной строки.

Я попытался установить драйвер менеджера дисплея и монитора лощины (EXE-файлы) с помощью вина на человечности, но не удался. Кто-либо попытался изменить входной источник монитора с помощью командной строки на Ubuntu?

6
задан 15 December 2016 в 11:37

2 ответа

Команда, которую Вы ищете, ddccontrol, доступна из обычного репозитория Ubuntu.

ПРЕДУПРЕЖДЕНИЕ! ddccontrol отправляет данные по шине i2c, которая является по сути опасной вещью сделать. Большинство i2c устройств является очень низким уровнем и очень немой, одной неуместной команды может быть достаточно, чтобы облицевать их кирпичом или по крайней мере заморозить компьютер. Тем не менее DDC/CI является несколько стандартизированной, довольно установленной и довольно старой технологией, таким образом, риски не слишком высоки.

поэтому по умолчанию, i2c устройства только доступны для корня. Необходимо будет, скорее всего, снабдить префиксом все команды ниже sudo. (Я добровольно не сделал этого, чтобы гарантировать, что Вы читаете инструкции и не вслепую скопировать/вставить их.)

Зондирование Вашего монитора

первое, что нужно сделать состоит в том, чтобы зондировать различные шины i2c в Вашем компьютере (мой имеет 11 таких шин...), ища тот, который находится на самом деле на видеокарте, подключенной к экрану.

Эти ddccontrol -p команда делает это и показывает то, что она нашла. Демонстрационный вывод от моего компьютера:

Detected monitors :
 - Device: dev:/dev/i2c-4
   DDC/CI supported: Yes
   Monitor Name: VESA standard monitor
   Input type: Digital
  (Automatically selected)
Reading EDID and initializing DDC/CI at bus dev:/dev/i2c-4...
I/O warning : failed to load external entity "/usr/share/ddccontrol-db/monitor/DELD070.xml"
Document not parsed successfully.

EDID readings:
        Plug and Play ID: DELD070 [VESA standard monitor]
        Input type: Digital

Примечание ввод-вывод, предупреждающий: это просто означает, что Ваш монитор неизвестен ddccontrol, таким образом, это не знает описание всех нестандартных команд и значений, это может поддерживать. Это не препятствует тому, чтобы Вы дали команды, но это может быть ошибочный процесс и пробные версии.

Примечание также обнаруженное название шины: dev:/dev/i2c-4 в моем примере.

Список всех команд

ddccontrol -d dev:/dev/i2c-4 команда читает все возможные средства управления (от 0x00 до 0xff) и показывает значения, которые это нашло. Конечно, необходимо использовать шину, найденную при зондировании.

ddccontrol также шоу описание для средств управления и значений, которые известны ему; или стандартные или описаны в XML-файлах. В моем примере нет никакого XML-файла для моего монитора (см., что ввод-вывод предупреждает выше).

Запросы значения

ddccontrol -r 0x10 dev:/dev/i2c-4 запросы текущее значение управления 0x10. Пример произвел:

Reading 0x10...
Control 0x10: +/21/100 C [Brightness]

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

Устанавливание значения

Эти ddccontrol -r 0x10 -w 25 dev:/dev/i2c-4 устанавливает значение управления 0x10. Пример произвел:

Writing 0x10, 0x19(25)...
Control 0x10: +/25/100 C [Brightness]

Примечание, что можно установить значения в шестнадцатеричных или десятичных форматах. В моем примере я использовал десятичное число.

Изменяющийся монитор ввел источник

, я нашел, что команда и значения использовали для переключения моих исходных данных монитора. Это работает хорошо, Вами должен будет, конечно, экспериментировать для нахождения значений для монитора. Мой - Управление Dell UltraSharp U2515H.

0x60 [Входной Исходный Выбор]

  • Значение 15: Значение DP
  • 16: Значение mDP
  • 17: HDMI (MHL) 1
  • Значение 18: HDMI (MHL) 2

значения находится в том же порядке как меню Input Source в мониторе.

, Например, переключаясь на DP: ddccontrol -r 0x60 -w 15 dev:/dev/i2c-4

9
ответ дан 23 November 2019 в 07:28

В дополнение к ответу Adrien Beau.

Изменение монитора ввело источник

Стандартная входная исходная команда изменения является 0x60. Таким образом, Вы хотите использовать такую команду:

ddccontrol -r 0x60 -w $some_value dev:/dev/i2c-X

Определение значений для передачи монитору

Но как Вы знаете, какие значения ответственны за который входной источник? Я не знаю, предоставляют ли поставщики такую информацию, но я нашел путь, как можно знать это, не спрашивая поставщика.

Просто считайте текущее значение команды 0x60 (использование sudo ddccontrol -r 0x60 dev:/dev/i2c-X). Это возвратит что-то вроде этого:

Случай, когда Ваш монитор находится в ddccontrol базе данных

EDID readings:
        Plug and Play ID: DELA0D7 [DELL P2217H (VGA)]
        Input type: Analog

Reading 0x60...
Control 0x60: +/257/4626 C [Input Source Select]

Случай, когда Ваш монитор не находится в ddccontrol базе данных

EDID readings:
        Plug and Play ID: DELA0D9 [VESA standard monitor]
        Input type: Digital
=============================== WARNING ===============================
There is no support for your monitor in the database, but ddccontrol is
using a basic generic profile. Many controls will not be supported, and
some controls may not work as expected.
Please update ddccontrol-db, or, if you are already using the latest
version, please send the output of the following command to
ddccontrol-users@lists.sourceforge.net:

LANG= LC_ALL= ddccontrol -p -c -d

Thank you.
=============================== WARNING ===============================

Reading 0x60...
Control 0x60: +/4369/4626 C [Input Source Select]

Давайте предположим, что Ваш монитор не находится в ddccontrol базе данных. Отметьте эти 4 369 значений. Это - значение, которое Вы будете использовать для переключения монитора назад на текущее состояние через кабель, который Вы, в настоящее время говорят с монитором. Обратите внимание на то, что это значение будет отличаться при использовании другого транспортного кабеля (я имею в виду порт, который Вы используете для разговора с монитором, например, через vga и через значения HDMI будет отличаться даже для того же входного источника).

Теперь, отключите автоматический входной источник выбора с помощью osd меню монитора, потому что мы не хотим это на данный момент. Теперь переключите входной источник с помощью osd меню монитора и затем считайте текущее значение. Для этого примера я переключил монитор для использования vga источника (источник прибывает из другого компьютера), при тихом разговоре для контроля с помощью HDMI с помощью первого компьютера, и возвращенное значение 4353. Сделайте то же для всех исходных данных, которые Вы планируете использовать для переключения.

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

sudo ddccontrol -r 0x60 -w 4353 dev:/dev/i2c-X # switch to vga input using hdmi cable on Dell P2217H
sudo ddccontrol -r 0x60 -w 4369 dev:/dev/i2c-X # switch to hdmi input using hdmi cable on Dell P2217H

Значения представлены в десятичном числе, однако можно использовать шестнадцатеричные значения как это:

sudo ddccontrol -r 0x60 -w 0x1101 dev:/dev/i2c-X # 0x1101 is 4353
sudo ddccontrol -r 0x60 -w 0x1111 dev:/dev/i2c-X # 0x1111 is 4369

Добавление монитора к ddccontrol базе данных

Теперь Вы хотите, чтобы Ваш монитор был в ddccontrol-дб. Необходимо исследовать значения для всех функций монитора и к каким значениям относятся, которые указывают. Затем необходимо создать XML-файл, описывающий все эти значения. Отметьте, будет несколько XML-файлов, из-за различных портов используют другой идентификатор Plug and Play монитора. Например, для моего DELL P2217H контролируют, я создам два файла: DELA0D7.xml (этот идентификатор используется при соединении через vga), и DELA0D9.xml (этот идентификатор используется при соединении с помощью HDMI). Dell P2217H имеет один vga, один HDMI и один DisplayPort. Поскольку я не получил устройства DisplayPort, я не могу сделать исследования для создания DELA0D8.xml (этот идентификатор используется при соединении через DisplayPort).

Некоторое описание xml параметров могло быть найдено на уровне страницы Monitor Database Structure (file:///usr/share/doc/ddccontrol/html/apes02.html).
Возможности (ограничения) и идентификатор Plug and Play могли быть получены с помощью
sudo ddccontrol -c dev:/dev/i2c-X.
Когда Вы готовы, способствуете https://github.com/ddccontrol/ddccontrol-db репозиторий.

Обнаружьте монитор порядковым номером

Давайте предположим подключение нескольких мониторов той же модели к одиночному компьютеру. Затем необходимо дифференцировать мониторы так или иначе. С этой целью я создал сценарий, который определяет i2c номер шины порядковым номером монитора. Я делаю это использование
sudo get-edid -b $X 2>/dev/null | grep $TARGET_SERIAL
Дополнительную информацию см. в моем репозитории: https://github.com/Ashark/Ashark-bin/blob/master/i2c-bus-by-monitor-serial

Заключительный сценарий для клавиатурной привязки

Теперь, см. этот сценарий: https://github.com/Ashark/Ashark-bin/blob/master/switch-monitor-source Вы может использовать его в качестве следующего:

switch-monitor-source -s 0G2TG7360DXB -u # get and cache i2c-id number for monitor with specified s/n
switch-monitor-source -s 0G2TG7360DXB -v # switch that monitor to vga input
switch-monitor-source -s 0G2TG7360DXB -h # switch that monitor to hdmi input

Теперь можно связать две последних команды с сочетанием клавиш и использовать их для быстрого переключения.Восхитительно!

2
ответ дан 23 November 2019 в 07:28

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

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