📜 ⬆️ ⬇️

How to live if you have a laptop, and the screens are not enough

image
A brief HowTo about how to live, if you have a laptop, and the screens were not enough.

Historically, I have never had a desktop PC. Only laptops, as required mobility. And the last current acquisition is the Asus S300CA ultrabook (with an unnecessary touch screen) with ArchLinux on board.
There is a monitor at 23.6 ". And everything would be fine - two screens, coziness, comfort, tiling. But some time ago, when there was more work, I again felt the lack of screens ...

It would seem that business is to connect another monitor to a free VGA port ... A kindly monitor was found in the bins of a monitor with VGA. We connect the monitor and ... And nothing! Totally. In addition to some kind of error issued by xrandr.

Internet smoking says that the installed Intel HD4000 can do 3 outputs simultaneously, but, as I understand it, provided that two of them are through identical digital channels, i.e. LVDS + HDMI + HDMI or LVDS + DP + DP (which does not exist at all).
')
Buy a personal PC? Well, I do not.

It was decided to try DisplayLink, which was previously an article. The technology is equipped, for example, monitors and projectors. The device is connected via USB and creates an additional video adapter in the system to transfer the image. No PC hardware modification is required, only a driver. In addition to the above, the converters to which the monitor is connected are also produced. Such a device and decided to try.

Such a converter from HP was found
image
Cozy support is promised to Mac and Windows users, but in this case we have Linux, so we get a tambourine ...

The link provides a good manual, which makes it clear a number of necessary things:


We connect the device to USB, we connect the monitor to the device - the monitor is lit bright green, which indicates readiness.
Let's see if the device is defined in the system:

[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 

We see the line Bus 003 Device 003: ID 17e9: 01d7 DisplayLink , which means there is hope.

X-server framebuffer support is required, for which the xf86-video-fbdev package exists . We also need xf86-video-modesetting .

Both packages are available in the Extra repository. Install:

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

Let's try to reboot and get the work out of the box, but again we see only the green screen.
Disable-connect the device and watch the output of 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 00 04 [ 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 discovered the device, read the available modes and tied the device / dev / fb1.
In principle, this is sufficient if the output settings will be done via the X server configs, but the desired one is xrandr support.

Actually, clinging to the fact that udlfb discovered the device, although there is udl in the system, we take for the fact that the modules conflict and therefore we add udlfb to the list of non-loadable ones. Create a displaylink.conf file and write it there:

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

Again we reboot and look at the available adapters:

 [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 

Hooray, now there are two of them! The first is via the integrated Intel HD4000, the second is via our adapter.

Now tell xrandr how to live with it:

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

... and see the conclusion:

 [user@machine ~]$ xrandr Screen 0: minimum 8 x 8, current 4566 x 1080, maximum 32767 x 32767 LVDS1 connected 1366x768+1280+0 (normal left inverted right x axis y 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 axis y axis) HDMI1 connected 1920x1080+2646+0 (normal left inverted right x axis y 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 axis y axis) VIRTUAL1 disconnected (normal left inverted right x axis y axis) DVI-1-0 connected 1280x1024+0+0 (normal left inverted right x axis y 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.000MHz h: width 1280 start 1328 end 1440 total 1688 skew 0 clock 63.98KHz v: height 1024 start 1025 end 1028 total 1066 clock 60.02Hz 1152x864 (0x45) 108.000MHz h: width 1152 start 1216 end 1344 total 1600 skew 0 clock 67.50KHz v: height 864 start 865 end 868 total 900 clock 75.00Hz 1024x768 (0x47) 75.000MHz h: width 1024 start 1048 end 1184 total 1328 skew 0 clock 56.48KHz v: height 768 start 771 end 777 total 806 clock 70.07Hz 1024x768 (0x48) 65.000MHz h: width 1024 start 1048 end 1184 total 1344 skew 0 clock 48.36KHz v: height 768 start 771 end 777 total 806 clock 60.00Hz 800x600 (0x4c) 40.000MHz h: width 800 start 840 end 968 total 1056 skew 0 clock 37.88KHz v: height 600 start 601 end 605 total 628 clock 60.32Hz 800x600 (0x4d) 36.000MHz h: width 800 start 824 end 896 total 1024 skew 0 clock 35.16KHz v: height 600 start 601 end 603 total 625 clock 56.25Hz 640x480 (0x50) 30.240MHz h: width 640 start 704 end 768 total 864 skew 0 clock 35.00KHz v: height 480 start 483 end 486 total 525 clock 66.67Hz 640x480 (0x51) 25.200MHz h: width 640 start 656 end 752 total 800 skew 0 clock 31.50KHz v: height 480 start 490 end 492 total 525 clock 60.00Hz 720x400 (0x52) 28.320MHz h: width 720 start 738 end 846 total 900 skew 0 clock 31.47KHz v: height 400 start 412 end 414 total 449 clock 70.08Hz 

DVI-1-0 - our desired conclusion.

At this small quest is completed. It remains only to specify xrandr'u how to work with conclusions. GUI lovers can use arandr , otherwise you can, for example, do this:

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

where LVDS1 is a built-in laptop output. For all outputs, the parameters are set automatically, HDMI1 to the right of LVDS1, DVI-1-0 to the left of LVDS1.

We get something like this:

image
DVI-1-0 - LVDS1 - HDMI1

And the general view:

image

PS: Found a problem with Chromium - when loading the page, as well as on the tab bar, the cursor constantly flickers. While the problem is observed on all monitors except the one that is displayed via DisplayLink. Thanks for the comment lopatoid - the problem was really corrected by turning off hardware acceleration in the Chromium settings.

I will be grateful to the community for comments on errors and inaccuracies, and I hope that this manual article will be useful to someone.

Source: https://habr.com/ru/post/245871/


All Articles