USB-мониторы DisplayLink

Материал из Rosalab Wiki
Версия от 18:24, 1 апреля 2014; Euspectre (обсуждение | вклад) (Новая страница: «Чтобы использовать в ROSA Fresh USB-монитор DisplayLink в качестве дополнительного, можно действова…»)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Чтобы использовать в ROSA Fresh USB-монитор DisplayLink в качестве дополнительного, можно действовать так.

1. Blacklist драйвер udlfb (он конфликтует с драйвером udl, который нужен для работы с доп. монитором):

# echo 'blacklist udlfb' >> /etc/modprobe.d/displaylink.conf

Это достаточно сделать один раз (то есть не нужно повторять при каждом подключении устройства). Затем стоит перезагрузить систему на всякий случай.

2. Подключить монитор к соотв. USB-разъёмам. По выводу lsusb можно понять, опознала система устройство или нет: см., есть там строка для DisplayLink или нет.

3. Проверить, что выдаёт xrandr --listproviders. Если система опознала устройство, то будет выдано что-то такое:

Providers: number : 2
Provider 0: id: 0x56 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 4 outputs: 3 associated providers: 0 name:radeon
Provider 1: id: 0x3a6 cap: 0x2, Sink Output crtcs: 1 outputs: 1 associated providers: 0 name:modesetting

Provider 1 с «name: modesetting» соответствует USB-монитору, provider 0 — основному монитору.

4. Указать, чтобы на доп. монитор шёл вывод с той же видеокарты (?), что и на основной:

xrandr --setprovideroutputsource <№ дополнительного provider'a> <№ основного provider'a>

В данном случае:

xrandr --setprovideroutputsource 1 0

5. Теперь система должна увидеть второй монитор.

xrandr покажет что-то такое:

$ xrandr
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
LVDS-1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 521mm x 293mm
   1920x1080      60.0*+  120.0    109.9     99.9  
<...>
   720x400        70.1  
DVI-0 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 194mm
   1366x768       60.0*+ 

Дополнительному монитору присвоено имя DVI-0. Заявленный режим — 1366x768, 60Гц. Это всё пригодится ниже.

Примечание 1. Похоже, если отключить доп. монитор от системы, а затем подключить снова, ему может быть присвоено уже другое имя. Это стоит проверять по выводу xrandr.

Примечание 2. На стационарных ПК (и др. ПК с обычными мониторами) основной монитор может иметь имя DVI-0, но дополнительному система может дать то же самое имя. X11 от этого может стать плохо, если ещё и включить 2-й монитор при этом. Похоже на баг. Workaround: отключить доп. монитор от USB разъёма и подкл. снова — имя, скорее всего, будет другое теперь, см. примечание 1.

6. Определить подходящий для устройства режим (тот, что по умолчанию, бывает неправильным: если его выбрать на доп. мониторе показываются только полосы или искажённая картинка).

Берём данные о разрешении из вывода xrandr, даём их команде gtf, она выдаст нужные параметры режима:

$ gtf 1366 768 60
  # 1368x768 @ 60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 85.86 MHz
  Modeline "1368x768_60.00"  85.86  1368 1440 1584 1800  768 769 772 795  -HSync +Vsync

То, что нам нужно, стоит после «Modeline». Стоит обратить внимание, что там — 1368, а не 1366, кстати.

7. Создать нужный режим:

xrandr --newmode <всё после Modeline в выводе gtf>

То есть в данном случае:

xrandr --newmode "1368x768_60.00"  85.86  1368 1440 1584 1800  768 769 772 795  -HSync +Vsync

Таким образом, создан режим с названием «1368x768_60.00».

8. Добавить свежесозданный режим в список доступных для доп. монитора. В нашем случае имя устройства — DVI-0. Получить это имя можно из вывода xrandr.

xrandr --addmode <имя_устройства> <название режима>

То есть:

xrandr --addmode DVI-0 "1368x768_60.00"

9. Теперь в настройках соотв. монитора появится режим 1368x768. Его и выбрать (можно в GUI system settings, можно с помощью того же xrandr). Всё должно заработать.

Правда, если теперь отключить устройство и подключить заново, процедуру придётся повторить (кроме blacklist udlfb).

TODO: файл в xorg.conf.d или udev rules to make this persistent.