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

image
Brief HowTo on how to live if you have a laptop, and the screens are missing.

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

It would seem, it’s business to plug another monitor into a free VGA -port ... A kindly comrade found a monitor with VGA in the bins. We connect the monitor and ... And nothing! Absolutely. Except for some error generated by xrandr.

Internet smoking says that the installed Intel HD4000 can 3 outputs at the same time, 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 about. Technology is equipped, for example, monitors and projectors. The device connects via USB and creates an additional video adapter in the system for image transfer. No hardware modification of the PC is required, only the driver. In addition to the above, the converters to which the monitor is connected are also produced. Such a device was decided to try.

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

The link contains a good manual that makes it clear a number of necessary things:

  • device supported
  • the udl module is required instead of the existing udlfb (although I still could not understand why udlfb continues to exist in the system if it is not applicable for this task)
  • all this is perfectly supported by xrandr

We connect the device to USB, we connect the monitor to the device - the monitor lights up in bright green, which indicates readiness.
Let's see if the device was determined 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.
Disconnect-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 bound the device / dev / fb1.
In principle, this is enough if the output settings will be made through the X-server configs, but the desired is xrandr support.

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

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

We reboot again 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! The first through the integrated Intel HD4000, the second through our adapter.

Now let xrandr know 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 is our finding.

This concludes the small quest. Further it remains only to tell xrandr how to work with the conclusions. GUI lovers can use arandr , otherwise you can do, for example, like this:

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

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

We get something like this:

image
DVI-1-0 - LVDS1 - HDMI1

And the general plan view:

image

PS: I found a problem with Chromium - when the page loads, and also on the tab bar, the cursor constantly flickers. Moreover, the problem is observed on all monitors except the one displayed via DisplayLink. Thanks for the comment lopatoid - the problem was really fixed by disabling hardware acceleration in the Chromium settings.

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

Also popular now: