Important: You are required to change your passwords used for Gentoo services and set an email address for your Wiki account if you haven't done so. See the full announcement and Wiki email policy change for more information.

DisplayLink

From Gentoo Wiki
Jump to: navigation, search
External resources
Article status
IconClipboardTask.png This article has some todo items:

DisplayLink is a technology that enables monitors to work via USB.

Installation

Kernel

You need to activate the following kernel options::

Kernel configuration

Device Drivers --->
    Graphics support --->
        <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)  --->
            <*>   DisplayLink
        <*> Support for frame buffer devices --->
            <*> Displaylink USB Framebuffer support

After booting into the new kernel the external monitor should show a green background image. That means the kernel module is loaded and the device works, it also creates the device in /dev/fb0.

Note
If you have already other framebuffer devices with your AMD driver, it will be /dev/fb1, ...

X driver

For X11 drivers, you can use x11-drivers/xf86-video-fbdev or x11-drivers/xf86-video-displaylink from the x11 overlay.

  • xf86-video-fbdev
Portage uses the variable VIDEO_CARDS for enabling support for various graphics cards in packages. Setting VIDEO_CARDS to fbdev will pull in the correct driver:
File/etc/portage/make.conf

 VIDEO_CARDS="fbdev"

After setting this you want to update your system so the changes take effect:

root # emerge --ask --changed-use --deep world
  • xf86-video-displaylink
root # emerge --ask xf86-video-displaylink

One X server

TODO

Two X server

This method is failsafe and should work with any graphics card installed. We start two instances of X server for each device and then use a software called x2x to move the input devices between them.

  • two independent instances and desktops
  • Input devices follow the mouse pointer

Software

For this method, we need another input device driver called x11-drivers/xf86-input-void:

File/etc/portage/make.conf

INPUT_DEVICES="... void ..."
root # emerge --ask --changed-use --deep @world

Also install x11-misc/x2x:

root # emerge --ask x2x

xorg.conf.DL

We configure two independent xorg.confs for each device and initialize the desktop using ~/.xinitrc scripts.

Note
You may need to check other xorg.conf files (including files in /etc/X11/xorg.conf.d/) for any overlap in various names used. See the Discussion page for details.

Create the file /etc/X11/xorg.conf.DL:

File/etc/X11/xorg.conf.DL

Section "Device"
    Identifier "DisplayLinkDevice"
    driver "displaylink"         # Or fbdev depending on what you installed
    Option "fbdev" "/dev/fb0"    # You have to use the correct framebuffer device here
EndSection

Section "Monitor"
    Identifier "DisplayLinkMonitor"
EndSection

Section "Screen"
    Identifier "Default Screen"
    Device "DisplayLinkDevice"
    Monitor "DisplayLinkMonitor"
    SubSection "Display"
        Depth 16         # 24bit works fine but for USB 2.0 a lot of data
        Modes "1280x1024"
    EndSubSection
EndSection

Section "ServerLayout"
    Identifier "Server Layout"
    Screen 0 "Default Screen" 0 0
    Option "AllowMouseOpenFail" "True"
    InputDevice "Keyboard0" "CoreKeyboard"
    InputDevice "Mouse0" "CorePointer"
EndSection

Section "ServerFlags"
    Option "AllowEmptyInput" "false"
    Option "AutoAddDevices" "false"
    Option "AutoEnableDevices" "false"
EndSection

Section "InputDevice"
    Identifier "Keyboard0"
    Driver "void"
EndSection

Section "InputDevice"
    Identifier "Mouse0"
    Driver "void"
EndSection

.xinitrc2

Next we create the ~/.xinitrc2 for your external display. Create and customize the file to your needs, here is an example:

Note
DPMS is turned off, because I once had trouble to wake up the monitor again.
File~/.xinitrc2

# DPMS stuff
## turn on monitor
xset dpms force on
## disable sleep modes etc.
xset -dpms
## disable screensaver
xset s off

# turn off beep
xset -b

# activate zapping (ctrl+alt+Bksp killall X)
setxkbmap -option terminate:ctrl_alt_bksp

# Set the background using feh
feh --bg-scale /usr/share/slim/themes/capernoited/background.jpg

# compositoring
xcompmgr -c -t-5 -l-5 -r4.2 -o.55 &

# start programs
wicd-client &
mrxvt &
# start the actual window manager
exec /usr/bin/awesome

displaylink.sh

This is the actual script that starts the second instance of X server. Make it executable and save it somewhere in your home folder, in this example we save it to ~/.displaylink.sh:

File~/.displaylink.sh

#!/bin/sh
xinit ~/.xinitrc2 -- /usr/bin/X :1 -xf86config xorg.conf.DL -novtswitch -sharevts -audit 0 -layout "Screen Layout" vt12 &
sleep 5
x2x -west -from :0 -to :1 &
Note
If you call this script to your actual ~/.xinitrc (which is executed on every start of X) or add it to GNOME, KDE, etc. autostart, it will automatically initialize the second desktop for you. If the second screen is not attached, it just fails to do so.
Note
If your system has a /etc/X11/xorg.conf.d/, most likely you will need to start with the above -layout option so the X11 server being started will start properly. See the discussion.

External resources