commit: 1580ad0ebf1b27055e699305e206b9f679c1b082 Author: Manuel Rüger <mrueg <AT> gentoo <DOT> org> AuthorDate: Mon Sep 26 21:51:42 2016 +0000 Commit: Manuel Rüger <mrueg <AT> gentoo <DOT> org> CommitDate: Mon Sep 26 21:51:42 2016 +0000 URL: https://gitweb.gentoo.org/dev/mrueg.git/commit/?id=1580ad0e
x11-drivers/displaylink-driver: Initial version, based on hossie-overlay Package-Manager: portage-2.3.1 x11-drivers/displaylink-driver/Manifest | 1 + .../displaylink-driver-1.2.58.ebuild | 75 +++++++++++++++++++++ .../displaylink-driver/files/99-displaylink.rules | 6 ++ .../displaylink-driver/files/displaylink.initd | 19 ++++++ x11-drivers/displaylink-driver/files/dlm.service | 14 ++++ .../displaylink-driver/files/pm-displaylink | 37 +++++++++++ .../files/pm-systemd-displaylink | 31 +++++++++ x11-drivers/displaylink-driver/files/udev.sh | 76 ++++++++++++++++++++++ x11-drivers/displaylink-driver/metadata.xml | 8 +++ 9 files changed, 267 insertions(+) diff --git a/x11-drivers/displaylink-driver/Manifest b/x11-drivers/displaylink-driver/Manifest new file mode 100644 index 0000000..a5c9848 --- /dev/null +++ b/x11-drivers/displaylink-driver/Manifest @@ -0,0 +1 @@ +DIST displaylink-driver-1.2.58.zip 12757717 SHA256 992aa3cf4bbd02ae370227cf18ee79d127a61ecfe452c76d84128502d91dc4ca SHA512 bcf90bedf424d5889917d34bf542882a231a4fa166415c9289e7e5051acebcc6e3bebee4a7372b512ff494dc0a52cf34cada827b94ecbbfa80d25f88c4cbf4e3 WHIRLPOOL 6ab7414cb11e046f16cae4cb0628c750ab1adb55d6fce9f62dade1afeb5cf89851bd2809d7372820b5c2e4bbfcab9888b0490fda086ee502408ec92fbde17abd diff --git a/x11-drivers/displaylink-driver/displaylink-driver-1.2.58.ebuild b/x11-drivers/displaylink-driver/displaylink-driver-1.2.58.ebuild new file mode 100644 index 0000000..4a19cd7 --- /dev/null +++ b/x11-drivers/displaylink-driver/displaylink-driver-1.2.58.ebuild @@ -0,0 +1,75 @@ +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +inherit eutils systemd udev + +DESCRIPTION="DisplayLink USB Graphics Software" +HOMEPAGE="http://www.displaylink.com/downloads/ubuntu" +SRC_URI="http://www.displaylink.com/downloads/file?id=701 -> ${P}.zip" + +LICENSE="DisplayLink" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="systemd" + +QA_PREBUILT="/opt/displaylink/DisplayLinkManager" + +DEPEND="app-admin/chrpath" +RDEPEND="=x11-drivers/evdi-1.2* + virtual/libusb:1 + || ( x11-drivers/xf86-video-modesetting >=x11-base/xorg-server-1.17.0 ) + !systemd? ( sys-power/pm-utils )" + +src_unpack() { + default + ./"${PN}"-"${PV}".run --nox11 --noexec --target "${P}" || die +} + +src_install() { + local DLM + case "${ARCH}" in + amd64) DLM="${S}/x64-ubuntu-1604/DisplayLinkManager" ;; + x86) DLM="${S}/x86-ubuntu-1604/DisplayLinkManager" ;; + esac + + dodir /opt/displaylink + dodir /var/log/displaylink + + exeinto /opt/displaylink + chrpath -d "${DLM}" || die + doexe "${DLM}" + + insinto /opt/displaylink + doins *.spkg + + udev_dorules "${FILESDIR}/99-displaylink.rules" + + systemd_dounit "${FILESDIR}/dlm.service" + newinitd "${FILESDIR}/displaylink.initd" dlm + + insinto /opt/displaylink + insopts -m0755 + doins "${FILESDIR}/udev.sh" + if use systemd; then + newins "${FILESDIR}/pm-systemd-displaylink" suspend.sh + dosym /opt/displaylink/suspend.sh /lib/systemd/system-sleep/displaylink.sh + else + newins "${FILESDIR}/pm-displaylink" suspend.sh + dosym /opt/displaylink/suspend.sh /etc/pm/sleep.d/displaylink.sh + fi +} + +pkg_postinst() { + einfo "The DisplayLinkManager Init is now called dlm" + einfo "and is triggered by udev" + einfo "" + einfo "You should be able to use xrandr as follows:" + einfo "xrandr --setprovideroutputsource 1 0" + einfo "Repeat for more screens, like:" + einfo "xrandr --setprovideroutputsource 2 0" + einfo "Then, you can use xrandr or GUI tools like arandr to configure the screens, e.g." + einfo "xrandr --output DVI-1-0 --auto" +} diff --git a/x11-drivers/displaylink-driver/files/99-displaylink.rules b/x11-drivers/displaylink-driver/files/99-displaylink.rules new file mode 100644 index 0000000..473640f --- /dev/null +++ b/x11-drivers/displaylink-driver/files/99-displaylink.rules @@ -0,0 +1,6 @@ +# Copyright (c) 2016 DisplayLink (UK) Ltd. +# File autogenerated by udev-installer.sh script + +ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ATTRS{idVendor}=="17e9", ATTR{bInterfaceClass}=="ff", ATTR{bInterfaceProtocol}=="03", ENV{ID_DISPLAYLINK_DEVICE}="1", RUN+="/opt/displaylink/udev.sh START" +ACTION=="remove", ENV{ID_DISPLAYLINK_DEVICE}=="1", RUN+="/opt/displaylink/udev.sh STOP $env{DEVPATH}" +ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{bNumInterfaces}=="*5", GROUP="plugdev", MODE="0660" diff --git a/x11-drivers/displaylink-driver/files/displaylink.initd b/x11-drivers/displaylink-driver/files/displaylink.initd new file mode 100644 index 0000000..4a368e7 --- /dev/null +++ b/x11-drivers/displaylink-driver/files/displaylink.initd @@ -0,0 +1,19 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +depend() { + after xdm +} + +start() { + modprobe -q evdi + start-stop-daemon --start --background --chdir /opt/displaylink --make-pidfile --pidfile /run/displaylink.pid --exec /opt/displaylink/DisplayLinkManager + eend $? +} + +stop() { + start-stop-daemon --stop --pidfile /run/displaylink.pid + eend $? +} diff --git a/x11-drivers/displaylink-driver/files/dlm.service b/x11-drivers/displaylink-driver/files/dlm.service new file mode 100644 index 0000000..54e6ead --- /dev/null +++ b/x11-drivers/displaylink-driver/files/dlm.service @@ -0,0 +1,14 @@ +[Unit] +Description=DisplayLink Manager Service +After=display-manager.service [email protected] + +[Service] +ExecStartPre=/sbin/modprobe evdi +ExecStart=/usr/lib/displaylink/DisplayLinkManager +Restart=always +WorkingDirectory=/opt/displaylink +RestartSec=5 + +[Install] +WantedBy=graphical.target diff --git a/x11-drivers/displaylink-driver/files/pm-displaylink b/x11-drivers/displaylink-driver/files/pm-displaylink new file mode 100644 index 0000000..a31bfc0 --- /dev/null +++ b/x11-drivers/displaylink-driver/files/pm-displaylink @@ -0,0 +1,37 @@ +#!/bin/bash +# Copyright (c) 2015 - 2016 DisplayLink (UK) Ltd. + +suspend_dlm() +{ + #flush any bytes in pipe + while read -n 1 -t 1 SUSPEND_RESULT < /tmp/PmMessagesPort_out; do : ; done; + + #suspend DisplayLinkManager + echo "S" > /tmp/PmMessagesPort_in + + if [ -f /tmp/PmMessagesPort_out ]; then + #wait until suspend of DisplayLinkManager finish + read -n 1 -t 10 SUSPEND_RESULT < /tmp/PmMessagesPort_out + fi +} + +resume_dlm() +{ + #resume DisplayLinkManager + echo "R" > /tmp/PmMessagesPort_in +} + +case "$1" in + thaw) + resume_dlm + ;; + hibernate) + suspend_dlm + ;; + suspend) + suspend_dlm + ;; + resume) + resume_dlm + ;; +esac diff --git a/x11-drivers/displaylink-driver/files/pm-systemd-displaylink b/x11-drivers/displaylink-driver/files/pm-systemd-displaylink new file mode 100644 index 0000000..4705b7f --- /dev/null +++ b/x11-drivers/displaylink-driver/files/pm-systemd-displaylink @@ -0,0 +1,31 @@ +#!/bin/bash +# Copyright (c) 2015 - 2016 DisplayLink (UK) Ltd. + +suspend_dlm() +{ + #flush any bytes in pipe + while read -n 1 -t 1 SUSPEND_RESULT < /tmp/PmMessagesPort_out; do : ; done; + + #suspend DisplayLinkManager + echo "S" > /tmp/PmMessagesPort_in + + if [ -f /tmp/PmMessagesPort_out ]; then + #wait until suspend of DisplayLinkManager finish + read -n 1 -t 10 SUSPEND_RESULT < /tmp/PmMessagesPort_out + fi +} + +resume_dlm() +{ + #resume DisplayLinkManager + echo "R" > /tmp/PmMessagesPort_in +} + +case "$1/$2" in + pre/*) + suspend_dlm + ;; + post/*) + resume_dlm + ;; +esac diff --git a/x11-drivers/displaylink-driver/files/udev.sh b/x11-drivers/displaylink-driver/files/udev.sh new file mode 100644 index 0000000..60e5623 --- /dev/null +++ b/x11-drivers/displaylink-driver/files/udev.sh @@ -0,0 +1,76 @@ +#!/bin/sh +# Copyright (c) 2016 DisplayLink (UK) Ltd. +# File autogenerated by udev-installer.sh script + +get_evdi_dev_count() +{ + if [ "$(ls -l /sys/devices/platform/* | grep evdi | wc -l)" = "0" ]; then + echo "0" + return + fi + + cat /sys/devices/platform/evdi.*/drm/card*/card*/status | grep "^connected$" | wc -l +} + +get_displaylink_dev_count() +{ + cat /sys/bus/usb/devices/*/idVendor | grep 17e9 | wc -l +} + +start_displaylink() +{ + if [ "$(get_displaylink_dev_count)" != "0" ]; then + start_service + fi +} + +try_stop_displaylink() +{ + if [ "$(get_evdi_dev_count)" = "0" ]; then + parent_dev_path="$1" + if [ -d "$parent_dev_path" ]; then + echo "1" + return + fi + + if [ "$(get_displaylink_dev_count)" = "0" ]; then + stop_service + echo "0" + return + fi + fi + echo "1" +} + +stop_displaylink() +{ + parent_devpath=$(dirname /sys$1) + retry_num="50" # 5s + while [ "$(try_stop_displaylink $parent_devpath)" != "0" ] && [ "$retry_num" != "0" ]; + do + sleep 0.1 + retry_num=$((retry_num-1)) + done +} + +main() +{ + op=$1 + devpath=$2 + if [ "$op" = "START" ]; then + start_displaylink + elif [ "$op" = "STOP" ]; then + stop_displaylink $devpath + fi +} + +start_service() +{ + service dlm start +} + +stop_service() +{ + service dlm stop +} +main $1 $2 diff --git a/x11-drivers/displaylink-driver/metadata.xml b/x11-drivers/displaylink-driver/metadata.xml new file mode 100644 index 0000000..97df2a0 --- /dev/null +++ b/x11-drivers/displaylink-driver/metadata.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer type="person"> + <email>[email protected]</email> + <name>Manuel Rüger</name> + </maintainer> +</pkgmetadata>
