Як жити, якщо у тебе ноутбук, а екранів стало не вистачати

image
Короткий HowTo про те, як жити, якщо у тебе ноутбук, а екранів стало не вистачати.

Історично так склалося, що у мене немає і ніколи не було стаціонарного ПК. Тільки ноутбуки, так як потрібна мобільність. І останнє нині актуальне придбання — ультрабук Asus S300CA (з непотрібним сенсорним екраном) з ArchLinux на борту.
Мається на монітор 23.6". І все б добре — два екрани, затишок, комфорт, тайлінг. Але деякий час тому, коли роботи стало більше, я знову відчув нестачу екранів…

Здавалося б, делов-то — підключити ще один монітор у вільний VGA-порт… Люб'язним товаришем був знайдений в засіках монітор VGA. Підключаємо монітор і… І нічого! Зовсім. Крім якоїсь помилки, що видається xrandr.

Куріння інтернетів каже, що встановлений Intel HD4000 вміє 3 виводу одночасно, але, як я зрозумів, за умови, що два з них через ідентичні цифрові канали, тобто LVDS + HDMI + HDMI або LVDS + DP + DP (якого взагалі немає).

Придбати персональний ПК? Ну вже немає.

Вирішено спробувати DisplayLink, про яке раніше була стаття. оснащуються Технологією, наприклад, монітори і проектори. Пристрій підключається по USB і створює в системі додатковий відеоадаптер для передачі зображення. Апаратної модифікації ПК не потрібно, тільки драйвер. Крім перерахованого виробляються і конвертери, до яких підключається монітор. Такий пристрій і вирішено спробувати.

Був знайдений ось такий конвертер від HP
image
Затишна обіцяна підтримка користувачам Mac і Windows, але в даному випадку маємо Linux, так що дістаємо бубон…

посилання наведено непоганий мануал, який дає зрозуміти ряд необхідних речей:

  • пристрій підтримується
  • необхідний модуль udl замість існуючого udlfb (хоча я так і не зміг зрозуміти, чому udlfb продовжує існувати в системі, якщо не застосуємо для цієї задачі)
  • все це відмінно підтримуватись xrandr'ом
Підключаємо пристрій в USB, підключаємо монітор до пристрою — монітор горить яскраво зеленим, що повідомляє про готовність.
Подивимося, визначилося пристрій у системі:

[root@machine ~]$ lsusb
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 005: ID 03eb:8810 Atmel Corp.. 
Bus 001 Device 004: ID 0bda:5705 Realtek Semiconductor Corp. 
Bus 001 Device 003: ID 13d3:3402 IMC Networks 
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 17e9:01d7 DisplayLink 
Bus 003 Device 002: ID 045e:07b1 Microsoft Corp. 
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Бачимо рядок Bus 003 Device 003: ID 17e9:01d7 DisplayLink, а значить, надії є.

Потрібна підтримка фрэймбуфера X-сервером, для чого існує пакет xf86-video-fbdev . Також нам потрібно xf86-video-modesetting.

Обидва пакети доступні в репозиторії Extra. Встановимо:

[root@machine ~]$ pacman-S xf86-video-fbdev xf86-video-modesetting

Спробуємо перезавантажитися і отримати роботу «з коробки», але знову бачимо тільки зелений екран.
Відключаємо-підключаємо пристрій і дивимося висновок dmesg:

[root@machine ~]$ dmesg
[ 53.300045] usb 1-2: new high-speed USB device number 9 using xhci_hcd
[ 53.479369] udlfb: DisplayLink HP USB Graphics Adap - serial #319454
[ 53.479387] udlfb: vid_17e9&pid_01d7&rev_0102 driver's dlfb_data struct at ffff8800ab8e7800
[ 53.479395] udlfb: console enable=1
[ 53.479398] udlfb: fb_defio enable=1
[ 53.479404] udlfb: shadow enable=1
[ 53.479546] udlfb: vendor descriptor length:1b data:1b 5f 01 0019 05 00 01 03 04 00
[ 53.479558] udlfb: DL chip limited to 2080000 pixel modes
[ 53.479653] udlfb: allocated 4 65024 byte urbs
[ 53.578156] udlfb: 1280x1024 @ 60 Hz valid mode
[ 53.578167] udlfb: 720x400 @ 70 Hz valid mode
[ 53.578171] udlfb: 640x480 @ 60 Hz valid mode
[ 53.578175] udlfb: 640x480 @ 67 Hz valid mode
[ 53.578178] udlfb: 640x480 @ 72 Hz valid mode
[ 53.578181] udlfb: 640x480 @ 75 Hz valid mode
[ 53.578184] udlfb: 800x600 @ 56 Hz valid mode
[ 53.578187] udlfb: 800x600 @ 60 Hz valid mode
[ 53.578190] udlfb: 800x600 @ 72 Hz valid mode
[ 53.578193] udlfb: 800x600 @ 75 Hz valid mode
[ 53.578196] udlfb: 832x624 @ 75 Hz valid mode
[ 53.578200] udlfb: 1024x768 @ 60 Hz valid mode
[ 53.578203] udlfb: 1024x768 @ 70 Hz valid mode
[ 53.578206] udlfb: 1024x768 @ 75 Hz valid mode
[ 53.578209] udlfb: 1280x1024 @ 75 Hz valid mode
[ 53.578213] udlfb: 1152x864 @ 75 Hz valid mode
[ 53.578216] udlfb: 1152x864 @ 75 Hz valid mode
[ 53.578219] udlfb: 1280x960 @ 60 Hz valid mode
[ 53.578222] udlfb: 1280x1024 @ 60 Hz valid mode
[ 53.578226] udlfb: Reallocating framebuffer. Addresses will change!
[ 53.579838] udlfb: 1280x1024 @ 60 Hz valid mode
[ 53.579849] udlfb: set_par mode 1280x1024
[ 53.589240] udlfb: DisplayLink USB device /dev/fb1 attached. 1280x1024 resolution. Using 5120K framebuffer memory

udlfb виявив пристрій, прочитав доступні режими і прив'язав пристрій /dev/fb1.
В принципі, цього достатньо, якщо настройка висновків буде проводитися через конфіги X-сервера, але бажане — підтримка xrandr.

Власне, чіпляючись за факт, що udlfb виявив пристрій, хоча udl в системі є, приймаємо за факт, що модулі конфліктують і тому вносимо udlfb в список не завантажуються. Створимо файл displaylink.conf і запишемо це туди:

[root@machine ~]$ echo 'blacklist udlfb' >> /etc/modprobe.d/displaylink.conf

Знову перезавантажуємося і дивимося доступні адаптери:

[user@machine ~]$ xrandr-listproviders:
Provider 0: id: 0x7b cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 4 outputs: 5 associated providers: 0 name:Intel
Provider 1: id: 0x41 cap: 0x2, Sink Output crtcs: 1 outputs: 1 associated providers: 0 name:modesetting

Ура, тепер їх два! Перший — через вбудований Intel HD4000, другий — через наш адаптер.

Тепер повідомимо xrandr як з цим жити:

[user@machine ~]$ xrandr-setprovideroutputsource 1 0

… і подивимося висновок:

[user@machine ~]$ xrandr 
Screen 0: minimum 8 x 8, current 4566 x 1080, maximum 32767 х 32767
LVDS 1 connected 1366x768+1280+0 (normal left inverted right x y axis axis) 293mm x 164mm
1366x768 60.02*+
1024x768 60.00 
800x600 60.32 56.25 
640x480 59.94 
DP1 disconnected (normal left inverted right x y axis axis)
HDMI1 connected 1920x1080+2646+0 (normal left inverted right x y axis axis) 509mm x 286mm
1920x1080 60.00*+ 50.00 59.94 30.00 29.97 
1680x1050 59.88 
1280x1024 60.02 
1440x900 59.90 
1280x800 59.91 
1152x864 75.00 
1280x720 60.00 50.00 59.94 
1024x768 70.07 60.00 
800x600 60.32 56.25 
720x576 50.00 
720x480 60.00 59.94 
640x480 66.67 60.00 59.94 
720x400 70.08 
VGA1 disconnected (normal left inverted right x y axis axis)
VIRTUAL1 disconnected (normal left inverted right x y axis axis)
DVI-1-0 connected 1280x1024+0+0 (normal left inverted right x y axis axis) 338mm x 270mm
1280x1024 60.02*+ 75.02 
1280x960 60.00 
1152x864 75.00 
1024x768 75.08 70.07 60.00 
832x624 74.55 
800x600 72.19 75.00 60.32 56.25 
640x480 75.00 72.81 66.67 60.00 
720x400 70.08 
1280x1024 (0x42) 108.000 MHz
h: width 1280 start 1328 end 1440 total 1688 skew 0 clock 63.98 KHz
v: height 1024 start 1025 end 1028 total 1066 clock 60.02 Hz
1152x864 (0x45) 108.000 MHz
h: width 1152 start 1216 end 1344 total 1600 skew 0 clock 67.50 KHz
v: height 864 start 865 end 868 total 900 clock 75.00Hz
1024x768 (0x47) 75.000 MHz
h: width 1024 start 1048 end 1184 total 1328 skew 0 clock 56.48 KHz
v: height 768 start 771 end 777 total 806 clock 70.07 Hz
1024x768 (0x48) 65.000 MHz
h: width 1024 start 1048 end 1184 total 1344 skew 0 clock 48.36 KHz
v: height 768 start 771 end 777 total 806 clock 60.00 Hz
800x600 (0x4c) 40.000 MHz
h: width 800 start 840 end 968 total 1056 skew 0 clock 37.88 KHz
v: 600 height start 601 end 605 total 628 clock 60.32 Hz
800x600 (0x4d) 36.000 MHz
h: width 800 start 824 end 896 total 1024 skew 0 clock 35.16 KHz
v: 600 height start 601 end 603 total 625 clock 56.25 Hz
640x480 (0x50) 30.240 MHz
h: width 640 start 704 end 768 total 864 skew 0 clock 35.00 KHz
v: 480 height start 483 end 486 total 525 clock 66.67 Hz
640x480 (0x51) 25.200 MHz
h: width 640 start 656 end 752 total 800 skew 0 clock 31.50 KHz
v: 480 height start 490 end 492 total 525 clock 60.00 Hz
720x400 (0x52) 28.320 MHz
h: width 720 start 738 end 846 total 900 skew 0 clock 31.47 KHz
v: height 400 start 412 end 414 total 449 clock 70.08 Hz

DVI-1-0 — наш шуканий висновок.

На цьому невеликий квест завершується. Далі залишається тільки вказати xrandr'як працювати з висновками. Любителі GUI можуть використовувати arandr, в іншому випадку можна зробити, наприклад, так:

[user@machine ~]$ xrandr --output LVDS 1 --auto --output HDMI1 --auto --right-of LVDS 1 --output DVI-1-0 --auto --left-of LVDS 1

, де LVDS 1 — вбудований висновок ноутбука. Для всіх висновків параметри встановлюються автоматично, HDMI1 вивести праворуч від LVDS 1, DVI-1-0 вивести зліва від LVDS 1.

Отримуємо щось подібне:

image
DVI-1-0 — LVDS 1 — HDMI1

І вигляд загальним планом:

image

P. S.: Виявив проблему з Chromium — при завантаженні сторінки, а також на панелі вкладок, курсор постійно мерехтить. При тому проблема спостерігається на всіх моніторах крім того, який виведений через DisplayLink.

Буду вдячний спільноті за зауваження про помилки та неточності і сподіваюся, що кому-то ця стаття-мануал стане в нагоді.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.