sipdude
10-10-2015, 03:29 AM
I put together this little collection of snippets to get around having to manually setup each time.
My laptop is a DELL XPS13 9343 running kernel 4.2.3 with Debian Jessie 8.2 and Gnome
and my DELL D3100 is connected to three identical monitors.
Perhaps it's of use to you. YMMV. No support given.
/etc/udev/rules.d/20-displaylink-add.rules
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="17e9", ATTRS{idProduct}=="436e" RUN+="/bin/systemctl start displaylink.service"
/etc/udev/rules.d/20-displaylink-remove.rules
ACTION=="remove", SUBSYSTEMS=="usb", ATTRS{idVendor}=="17e9", ATTRS{idProduct}=="436e" RUN+="/bin/sh -c '/bin/systemctl stop displaylink.service; /usr/bin/xrandr --output eDP1 --auto'"
~/.config/autostart/displaylink-autoset.desktop
[Desktop Entry]
Name=DisplayLink Setup
GenericName=Auto setup of displaylink screens
Comment=DisplayLink setup
Exec=/bin/setup-displaylink-screens.sh auto
Terminal=false
Type=Application
X-Gnome-Autostart=true
Icon=device-display
/bin/setup-displaylink-screens.sh
#!/bin/sh
# --- info
#
# Original script developed by sipdude 2015-10-03
#
# The sleep calls are necessary to prevent the X server from crashing.
# Feel free to adjust as needed
# --- settings for DELL XPS13 9343 with DELL D3100 connected to 3 monitors
# D_CENTER connected to DP and D_LEFT and D_RIGHT to HDMI
#
D_LAPTOP=eDP1
D_LEFT=DVI-3-2
D_CENTER=DVI-1-0
D_RIGHT=DVI-2-1
# --- monitor mode and framerate
#
MODE=1920x1200
RATE=60
# --- functions
#
handle_rc()
{
local rc
rc=$1 ; shift
if [ $rc -eq 0 ] ; then
echo " done!"
else
echo " fail!";
exit $rc
fi
}
visual_sleep()
{
local esc pfx sec
sec=$1 ; shift
[ -n "$1" ] && pfx="$1" || pfx="Waiting: "
esc="\033[2K\33[u"
echo -n "\33[s"
while [ $sec -gt 0 ] ; do
echo -n "$esc$pfx$sec"
sec=$((sec - 1))
sleep 1
done
echo -n "$esc"
}
# --- service
#
[ -n "$1" -a x"$1" = "xauto" ] && AUTO=Y || AUTO=N
[ -n "$DISPLAY" ] && X_DISPLAY=$DISPLAY || X_DISPLAY=":0"
[ "$AUTO" = "Y" ] && echo "Running in automatic mode" || echo "Running in interactive mode"
echo "Using X display: $X_DISPLAY"
echo -n "Checking displaylink service:"
if ! systemctl status displaylink.service | grep -q 'Active: active (running)' >/dev/null ; then
echo " not started!"
if [ "$AUTO" = "Y" ] ; then
echo "Cannot start the displaylink service in automatic mode. Aborting!"
exit
fi
echo "Attempting to start service..."
sudo systemctl start displaylink.service
rc=$?
if [ $rc -eq 0 ] ; then
echo "Successfully started displaylink service."
else
echo "Failed to start displaylink service!"
exit
fi
visual_sleep 5
else
echo " already started!"
fi
# --- inits
#
echo -n "Initializing outputs:"
for outp in 1 2 3 ; do
echo -n " $outp";
xrandr --setprovideroutputsource $outp 0
rc=$?
if [ $rc -eq 0 ] ; then echo -n ":ok" ; else echo ":fail"; exit $rc; fi
sleep 5
done
echo
# --- displays
#
for disp in $D_CENTER $D_LEFT $D_RIGHT ; do
echo -n "Enabling display $disp:"
xrandr --display $X_DISPLAY --output $disp --rate $RATE --mode $MODE
handle_rc $?
visual_sleep 10
done
# --- positions
#
echo -n "Setting position for left display:"
xrandr --display $X_DISPLAY --output $D_LEFT --left-of $D_CENTER
handle_rc $?
visual_sleep 10
echo -n "Setting position for right display:"
xrandr --display $X_DISPLAY --output $D_RIGHT --right-of $D_CENTER
handle_rc $?
visual_sleep 10
# --- laptop
#
echo -n "Turning off laptop display:"
xrandr --display $X_DISPLAY --output $D_LAPTOP --off
handle_rc $?
visual_sleep 10
echo "Finished!"
exit 0
My laptop is a DELL XPS13 9343 running kernel 4.2.3 with Debian Jessie 8.2 and Gnome
and my DELL D3100 is connected to three identical monitors.
Perhaps it's of use to you. YMMV. No support given.
/etc/udev/rules.d/20-displaylink-add.rules
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="17e9", ATTRS{idProduct}=="436e" RUN+="/bin/systemctl start displaylink.service"
/etc/udev/rules.d/20-displaylink-remove.rules
ACTION=="remove", SUBSYSTEMS=="usb", ATTRS{idVendor}=="17e9", ATTRS{idProduct}=="436e" RUN+="/bin/sh -c '/bin/systemctl stop displaylink.service; /usr/bin/xrandr --output eDP1 --auto'"
~/.config/autostart/displaylink-autoset.desktop
[Desktop Entry]
Name=DisplayLink Setup
GenericName=Auto setup of displaylink screens
Comment=DisplayLink setup
Exec=/bin/setup-displaylink-screens.sh auto
Terminal=false
Type=Application
X-Gnome-Autostart=true
Icon=device-display
/bin/setup-displaylink-screens.sh
#!/bin/sh
# --- info
#
# Original script developed by sipdude 2015-10-03
#
# The sleep calls are necessary to prevent the X server from crashing.
# Feel free to adjust as needed
# --- settings for DELL XPS13 9343 with DELL D3100 connected to 3 monitors
# D_CENTER connected to DP and D_LEFT and D_RIGHT to HDMI
#
D_LAPTOP=eDP1
D_LEFT=DVI-3-2
D_CENTER=DVI-1-0
D_RIGHT=DVI-2-1
# --- monitor mode and framerate
#
MODE=1920x1200
RATE=60
# --- functions
#
handle_rc()
{
local rc
rc=$1 ; shift
if [ $rc -eq 0 ] ; then
echo " done!"
else
echo " fail!";
exit $rc
fi
}
visual_sleep()
{
local esc pfx sec
sec=$1 ; shift
[ -n "$1" ] && pfx="$1" || pfx="Waiting: "
esc="\033[2K\33[u"
echo -n "\33[s"
while [ $sec -gt 0 ] ; do
echo -n "$esc$pfx$sec"
sec=$((sec - 1))
sleep 1
done
echo -n "$esc"
}
# --- service
#
[ -n "$1" -a x"$1" = "xauto" ] && AUTO=Y || AUTO=N
[ -n "$DISPLAY" ] && X_DISPLAY=$DISPLAY || X_DISPLAY=":0"
[ "$AUTO" = "Y" ] && echo "Running in automatic mode" || echo "Running in interactive mode"
echo "Using X display: $X_DISPLAY"
echo -n "Checking displaylink service:"
if ! systemctl status displaylink.service | grep -q 'Active: active (running)' >/dev/null ; then
echo " not started!"
if [ "$AUTO" = "Y" ] ; then
echo "Cannot start the displaylink service in automatic mode. Aborting!"
exit
fi
echo "Attempting to start service..."
sudo systemctl start displaylink.service
rc=$?
if [ $rc -eq 0 ] ; then
echo "Successfully started displaylink service."
else
echo "Failed to start displaylink service!"
exit
fi
visual_sleep 5
else
echo " already started!"
fi
# --- inits
#
echo -n "Initializing outputs:"
for outp in 1 2 3 ; do
echo -n " $outp";
xrandr --setprovideroutputsource $outp 0
rc=$?
if [ $rc -eq 0 ] ; then echo -n ":ok" ; else echo ":fail"; exit $rc; fi
sleep 5
done
echo
# --- displays
#
for disp in $D_CENTER $D_LEFT $D_RIGHT ; do
echo -n "Enabling display $disp:"
xrandr --display $X_DISPLAY --output $disp --rate $RATE --mode $MODE
handle_rc $?
visual_sleep 10
done
# --- positions
#
echo -n "Setting position for left display:"
xrandr --display $X_DISPLAY --output $D_LEFT --left-of $D_CENTER
handle_rc $?
visual_sleep 10
echo -n "Setting position for right display:"
xrandr --display $X_DISPLAY --output $D_RIGHT --right-of $D_CENTER
handle_rc $?
visual_sleep 10
# --- laptop
#
echo -n "Turning off laptop display:"
xrandr --display $X_DISPLAY --output $D_LAPTOP --off
handle_rc $?
visual_sleep 10
echo "Finished!"
exit 0