DisplayLink is a technology that enables monitors to work via USB. In general the local GPU renders the picture,Template:Fact the frambuffer device compresses the data and sends it to the external device via USB.
Note: There is a new DRM_UDL driver for this hardware, merged into the 3.4 release cycle. I have not gotten it to work yet, even with the xf86-video-modesetting X11 driver.
Also, you can use the xf86-video-fbdev driver as well.
Enable the DisplayLink framebuffer device in your kernel:
Device Drivers --->
Graphics support --->
<M> Support for frame buffer devices --->
<M> 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.
if you have already other framebuffer devices with your AMD driver, it will be /dev/fb1...
The X driver x11-drivers/xf86-video-displaylink is only available in the X11 overlay. Assuming layman is already configured, you add it with the following command:
layman -a x11
Then update your /etc/make.conf with the new graphics card:
Portage uses the variable VIDEO_CARDS for enabling support for various graphics cards in packages. Setting VIDEO_CARDS to displaylink will pull in the correct driver:
After setting this you want to update your system so the changes take effect:
emerge --ask --changed-use --deep world
if it does not pull the driver with emerge -DuN world, install it manually
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
For this method, we need another input device driver called x11-drivers/xf86-input-void:
INPUT_DEVICES="... void ..."
check if it pulls the X driver with emerge -DuN world, if not install it manually
The program x11-misc/x2x is available in portage and can be installed via:
emerge -av x11-misc/x2x
We configure two independent /etc/X11/xorg.conf for each device and initialize the desktop using ~/.xinitrc scripts.
Create this file in /etc/X11/ and name it xorg.conf.DL:
Option "fbdev" "/dev/fb0" # You have to use the correct framebuffer device here
Identifier "Default Screen"
Depth 16 # 24bit works fine but for USB 2.0 a lot of data
Identifier "Server Layout"
Screen 0 "Default Screen" 0 0
Option "AllowMouseOpenFail" "True"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "AllowEmptyInput" "false"
Option "AutoAddDevices" "false"
Option "AutoEnableDevices" "false"
Next we create the ~/.initrc2 for our external display. Create and customize the file to your needs, here is an example:
DPMS is turned off, because I once had trouble to wake up the monitor again
# DPMS stuff
## turn on monitor
xset dpms force on
## disable sleep modes etc.
## disable screensaver
xset s off
# turn off beep
# 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
xcompmgr -c -t-5 -l-5 -r4.2 -o.55 &
# start programs
# start the actual window manager
This is the actual script that starts the second instance of xorg-server. Make it executeable and save it somewhere in your home folder, in this example we save it to ~/.displaylink.sh
xinit ~/.xinitrc2 -- /usr/bin/X :1 -xf86config xorg.conf.DL -novtswitch -sharevts -audit 0 vt12 &
x2x -west -from :0 -to :1 &
If you add 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.