DisplayLink
DisplayLink is a technology that enables monitors to work via USB.
Contents |
Installation
Kernel
You need to activate the following kernel options::
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.
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:
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:
INPUT_DEVICES="... void ..."
root # emerge --ask --changed-use --deep @worldAlso install x11-misc/x2x:
root # emerge --ask x2xxorg.conf.DL
We configure two independent xorg.confs for each device and initialize the desktop using ~/.xinitrc scripts.
Create the 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:
# 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:
#!/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 &