1 |
commit: 1580ad0ebf1b27055e699305e206b9f679c1b082 |
2 |
Author: Manuel Rüger <mrueg <AT> gentoo <DOT> org> |
3 |
AuthorDate: Mon Sep 26 21:51:42 2016 +0000 |
4 |
Commit: Manuel Rüger <mrueg <AT> gentoo <DOT> org> |
5 |
CommitDate: Mon Sep 26 21:51:42 2016 +0000 |
6 |
URL: https://gitweb.gentoo.org/dev/mrueg.git/commit/?id=1580ad0e |
7 |
|
8 |
x11-drivers/displaylink-driver: Initial version, based on hossie-overlay |
9 |
|
10 |
Package-Manager: portage-2.3.1 |
11 |
|
12 |
x11-drivers/displaylink-driver/Manifest | 1 + |
13 |
.../displaylink-driver-1.2.58.ebuild | 75 +++++++++++++++++++++ |
14 |
.../displaylink-driver/files/99-displaylink.rules | 6 ++ |
15 |
.../displaylink-driver/files/displaylink.initd | 19 ++++++ |
16 |
x11-drivers/displaylink-driver/files/dlm.service | 14 ++++ |
17 |
.../displaylink-driver/files/pm-displaylink | 37 +++++++++++ |
18 |
.../files/pm-systemd-displaylink | 31 +++++++++ |
19 |
x11-drivers/displaylink-driver/files/udev.sh | 76 ++++++++++++++++++++++ |
20 |
x11-drivers/displaylink-driver/metadata.xml | 8 +++ |
21 |
9 files changed, 267 insertions(+) |
22 |
|
23 |
diff --git a/x11-drivers/displaylink-driver/Manifest b/x11-drivers/displaylink-driver/Manifest |
24 |
new file mode 100644 |
25 |
index 0000000..a5c9848 |
26 |
--- /dev/null |
27 |
+++ b/x11-drivers/displaylink-driver/Manifest |
28 |
@@ -0,0 +1 @@ |
29 |
+DIST displaylink-driver-1.2.58.zip 12757717 SHA256 992aa3cf4bbd02ae370227cf18ee79d127a61ecfe452c76d84128502d91dc4ca SHA512 bcf90bedf424d5889917d34bf542882a231a4fa166415c9289e7e5051acebcc6e3bebee4a7372b512ff494dc0a52cf34cada827b94ecbbfa80d25f88c4cbf4e3 WHIRLPOOL 6ab7414cb11e046f16cae4cb0628c750ab1adb55d6fce9f62dade1afeb5cf89851bd2809d7372820b5c2e4bbfcab9888b0490fda086ee502408ec92fbde17abd |
30 |
|
31 |
diff --git a/x11-drivers/displaylink-driver/displaylink-driver-1.2.58.ebuild b/x11-drivers/displaylink-driver/displaylink-driver-1.2.58.ebuild |
32 |
new file mode 100644 |
33 |
index 0000000..4a19cd7 |
34 |
--- /dev/null |
35 |
+++ b/x11-drivers/displaylink-driver/displaylink-driver-1.2.58.ebuild |
36 |
@@ -0,0 +1,75 @@ |
37 |
+# Copyright 1999-2016 Gentoo Foundation |
38 |
+# Distributed under the terms of the GNU General Public License v2 |
39 |
+# $Id$ |
40 |
+ |
41 |
+EAPI=5 |
42 |
+ |
43 |
+inherit eutils systemd udev |
44 |
+ |
45 |
+DESCRIPTION="DisplayLink USB Graphics Software" |
46 |
+HOMEPAGE="http://www.displaylink.com/downloads/ubuntu" |
47 |
+SRC_URI="http://www.displaylink.com/downloads/file?id=701 -> ${P}.zip" |
48 |
+ |
49 |
+LICENSE="DisplayLink" |
50 |
+SLOT="0" |
51 |
+KEYWORDS="~amd64 ~x86" |
52 |
+IUSE="systemd" |
53 |
+ |
54 |
+QA_PREBUILT="/opt/displaylink/DisplayLinkManager" |
55 |
+ |
56 |
+DEPEND="app-admin/chrpath" |
57 |
+RDEPEND="=x11-drivers/evdi-1.2* |
58 |
+ virtual/libusb:1 |
59 |
+ || ( x11-drivers/xf86-video-modesetting >=x11-base/xorg-server-1.17.0 ) |
60 |
+ !systemd? ( sys-power/pm-utils )" |
61 |
+ |
62 |
+src_unpack() { |
63 |
+ default |
64 |
+ ./"${PN}"-"${PV}".run --nox11 --noexec --target "${P}" || die |
65 |
+} |
66 |
+ |
67 |
+src_install() { |
68 |
+ local DLM |
69 |
+ case "${ARCH}" in |
70 |
+ amd64) DLM="${S}/x64-ubuntu-1604/DisplayLinkManager" ;; |
71 |
+ x86) DLM="${S}/x86-ubuntu-1604/DisplayLinkManager" ;; |
72 |
+ esac |
73 |
+ |
74 |
+ dodir /opt/displaylink |
75 |
+ dodir /var/log/displaylink |
76 |
+ |
77 |
+ exeinto /opt/displaylink |
78 |
+ chrpath -d "${DLM}" || die |
79 |
+ doexe "${DLM}" |
80 |
+ |
81 |
+ insinto /opt/displaylink |
82 |
+ doins *.spkg |
83 |
+ |
84 |
+ udev_dorules "${FILESDIR}/99-displaylink.rules" |
85 |
+ |
86 |
+ systemd_dounit "${FILESDIR}/dlm.service" |
87 |
+ newinitd "${FILESDIR}/displaylink.initd" dlm |
88 |
+ |
89 |
+ insinto /opt/displaylink |
90 |
+ insopts -m0755 |
91 |
+ doins "${FILESDIR}/udev.sh" |
92 |
+ if use systemd; then |
93 |
+ newins "${FILESDIR}/pm-systemd-displaylink" suspend.sh |
94 |
+ dosym /opt/displaylink/suspend.sh /lib/systemd/system-sleep/displaylink.sh |
95 |
+ else |
96 |
+ newins "${FILESDIR}/pm-displaylink" suspend.sh |
97 |
+ dosym /opt/displaylink/suspend.sh /etc/pm/sleep.d/displaylink.sh |
98 |
+ fi |
99 |
+} |
100 |
+ |
101 |
+pkg_postinst() { |
102 |
+ einfo "The DisplayLinkManager Init is now called dlm" |
103 |
+ einfo "and is triggered by udev" |
104 |
+ einfo "" |
105 |
+ einfo "You should be able to use xrandr as follows:" |
106 |
+ einfo "xrandr --setprovideroutputsource 1 0" |
107 |
+ einfo "Repeat for more screens, like:" |
108 |
+ einfo "xrandr --setprovideroutputsource 2 0" |
109 |
+ einfo "Then, you can use xrandr or GUI tools like arandr to configure the screens, e.g." |
110 |
+ einfo "xrandr --output DVI-1-0 --auto" |
111 |
+} |
112 |
|
113 |
diff --git a/x11-drivers/displaylink-driver/files/99-displaylink.rules b/x11-drivers/displaylink-driver/files/99-displaylink.rules |
114 |
new file mode 100644 |
115 |
index 0000000..473640f |
116 |
--- /dev/null |
117 |
+++ b/x11-drivers/displaylink-driver/files/99-displaylink.rules |
118 |
@@ -0,0 +1,6 @@ |
119 |
+# Copyright (c) 2016 DisplayLink (UK) Ltd. |
120 |
+# File autogenerated by udev-installer.sh script |
121 |
+ |
122 |
+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" |
123 |
+ACTION=="remove", ENV{ID_DISPLAYLINK_DEVICE}=="1", RUN+="/opt/displaylink/udev.sh STOP $env{DEVPATH}" |
124 |
+ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{bNumInterfaces}=="*5", GROUP="plugdev", MODE="0660" |
125 |
|
126 |
diff --git a/x11-drivers/displaylink-driver/files/displaylink.initd b/x11-drivers/displaylink-driver/files/displaylink.initd |
127 |
new file mode 100644 |
128 |
index 0000000..4a368e7 |
129 |
--- /dev/null |
130 |
+++ b/x11-drivers/displaylink-driver/files/displaylink.initd |
131 |
@@ -0,0 +1,19 @@ |
132 |
+#!/sbin/openrc-run |
133 |
+# Copyright 1999-2016 Gentoo Foundation |
134 |
+# Distributed under the terms of the GNU General Public License v2 |
135 |
+# $Id$ |
136 |
+ |
137 |
+depend() { |
138 |
+ after xdm |
139 |
+} |
140 |
+ |
141 |
+start() { |
142 |
+ modprobe -q evdi |
143 |
+ start-stop-daemon --start --background --chdir /opt/displaylink --make-pidfile --pidfile /run/displaylink.pid --exec /opt/displaylink/DisplayLinkManager |
144 |
+ eend $? |
145 |
+} |
146 |
+ |
147 |
+stop() { |
148 |
+ start-stop-daemon --stop --pidfile /run/displaylink.pid |
149 |
+ eend $? |
150 |
+} |
151 |
|
152 |
diff --git a/x11-drivers/displaylink-driver/files/dlm.service b/x11-drivers/displaylink-driver/files/dlm.service |
153 |
new file mode 100644 |
154 |
index 0000000..54e6ead |
155 |
--- /dev/null |
156 |
+++ b/x11-drivers/displaylink-driver/files/dlm.service |
157 |
@@ -0,0 +1,14 @@ |
158 |
+[Unit] |
159 |
+Description=DisplayLink Manager Service |
160 |
+After=display-manager.service |
161 |
+Conflicts=getty@××××.service |
162 |
+ |
163 |
+[Service] |
164 |
+ExecStartPre=/sbin/modprobe evdi |
165 |
+ExecStart=/usr/lib/displaylink/DisplayLinkManager |
166 |
+Restart=always |
167 |
+WorkingDirectory=/opt/displaylink |
168 |
+RestartSec=5 |
169 |
+ |
170 |
+[Install] |
171 |
+WantedBy=graphical.target |
172 |
|
173 |
diff --git a/x11-drivers/displaylink-driver/files/pm-displaylink b/x11-drivers/displaylink-driver/files/pm-displaylink |
174 |
new file mode 100644 |
175 |
index 0000000..a31bfc0 |
176 |
--- /dev/null |
177 |
+++ b/x11-drivers/displaylink-driver/files/pm-displaylink |
178 |
@@ -0,0 +1,37 @@ |
179 |
+#!/bin/bash |
180 |
+# Copyright (c) 2015 - 2016 DisplayLink (UK) Ltd. |
181 |
+ |
182 |
+suspend_dlm() |
183 |
+{ |
184 |
+ #flush any bytes in pipe |
185 |
+ while read -n 1 -t 1 SUSPEND_RESULT < /tmp/PmMessagesPort_out; do : ; done; |
186 |
+ |
187 |
+ #suspend DisplayLinkManager |
188 |
+ echo "S" > /tmp/PmMessagesPort_in |
189 |
+ |
190 |
+ if [ -f /tmp/PmMessagesPort_out ]; then |
191 |
+ #wait until suspend of DisplayLinkManager finish |
192 |
+ read -n 1 -t 10 SUSPEND_RESULT < /tmp/PmMessagesPort_out |
193 |
+ fi |
194 |
+} |
195 |
+ |
196 |
+resume_dlm() |
197 |
+{ |
198 |
+ #resume DisplayLinkManager |
199 |
+ echo "R" > /tmp/PmMessagesPort_in |
200 |
+} |
201 |
+ |
202 |
+case "$1" in |
203 |
+ thaw) |
204 |
+ resume_dlm |
205 |
+ ;; |
206 |
+ hibernate) |
207 |
+ suspend_dlm |
208 |
+ ;; |
209 |
+ suspend) |
210 |
+ suspend_dlm |
211 |
+ ;; |
212 |
+ resume) |
213 |
+ resume_dlm |
214 |
+ ;; |
215 |
+esac |
216 |
|
217 |
diff --git a/x11-drivers/displaylink-driver/files/pm-systemd-displaylink b/x11-drivers/displaylink-driver/files/pm-systemd-displaylink |
218 |
new file mode 100644 |
219 |
index 0000000..4705b7f |
220 |
--- /dev/null |
221 |
+++ b/x11-drivers/displaylink-driver/files/pm-systemd-displaylink |
222 |
@@ -0,0 +1,31 @@ |
223 |
+#!/bin/bash |
224 |
+# Copyright (c) 2015 - 2016 DisplayLink (UK) Ltd. |
225 |
+ |
226 |
+suspend_dlm() |
227 |
+{ |
228 |
+ #flush any bytes in pipe |
229 |
+ while read -n 1 -t 1 SUSPEND_RESULT < /tmp/PmMessagesPort_out; do : ; done; |
230 |
+ |
231 |
+ #suspend DisplayLinkManager |
232 |
+ echo "S" > /tmp/PmMessagesPort_in |
233 |
+ |
234 |
+ if [ -f /tmp/PmMessagesPort_out ]; then |
235 |
+ #wait until suspend of DisplayLinkManager finish |
236 |
+ read -n 1 -t 10 SUSPEND_RESULT < /tmp/PmMessagesPort_out |
237 |
+ fi |
238 |
+} |
239 |
+ |
240 |
+resume_dlm() |
241 |
+{ |
242 |
+ #resume DisplayLinkManager |
243 |
+ echo "R" > /tmp/PmMessagesPort_in |
244 |
+} |
245 |
+ |
246 |
+case "$1/$2" in |
247 |
+ pre/*) |
248 |
+ suspend_dlm |
249 |
+ ;; |
250 |
+ post/*) |
251 |
+ resume_dlm |
252 |
+ ;; |
253 |
+esac |
254 |
|
255 |
diff --git a/x11-drivers/displaylink-driver/files/udev.sh b/x11-drivers/displaylink-driver/files/udev.sh |
256 |
new file mode 100644 |
257 |
index 0000000..60e5623 |
258 |
--- /dev/null |
259 |
+++ b/x11-drivers/displaylink-driver/files/udev.sh |
260 |
@@ -0,0 +1,76 @@ |
261 |
+#!/bin/sh |
262 |
+# Copyright (c) 2016 DisplayLink (UK) Ltd. |
263 |
+# File autogenerated by udev-installer.sh script |
264 |
+ |
265 |
+get_evdi_dev_count() |
266 |
+{ |
267 |
+ if [ "$(ls -l /sys/devices/platform/* | grep evdi | wc -l)" = "0" ]; then |
268 |
+ echo "0" |
269 |
+ return |
270 |
+ fi |
271 |
+ |
272 |
+ cat /sys/devices/platform/evdi.*/drm/card*/card*/status | grep "^connected$" | wc -l |
273 |
+} |
274 |
+ |
275 |
+get_displaylink_dev_count() |
276 |
+{ |
277 |
+ cat /sys/bus/usb/devices/*/idVendor | grep 17e9 | wc -l |
278 |
+} |
279 |
+ |
280 |
+start_displaylink() |
281 |
+{ |
282 |
+ if [ "$(get_displaylink_dev_count)" != "0" ]; then |
283 |
+ start_service |
284 |
+ fi |
285 |
+} |
286 |
+ |
287 |
+try_stop_displaylink() |
288 |
+{ |
289 |
+ if [ "$(get_evdi_dev_count)" = "0" ]; then |
290 |
+ parent_dev_path="$1" |
291 |
+ if [ -d "$parent_dev_path" ]; then |
292 |
+ echo "1" |
293 |
+ return |
294 |
+ fi |
295 |
+ |
296 |
+ if [ "$(get_displaylink_dev_count)" = "0" ]; then |
297 |
+ stop_service |
298 |
+ echo "0" |
299 |
+ return |
300 |
+ fi |
301 |
+ fi |
302 |
+ echo "1" |
303 |
+} |
304 |
+ |
305 |
+stop_displaylink() |
306 |
+{ |
307 |
+ parent_devpath=$(dirname /sys$1) |
308 |
+ retry_num="50" # 5s |
309 |
+ while [ "$(try_stop_displaylink $parent_devpath)" != "0" ] && [ "$retry_num" != "0" ]; |
310 |
+ do |
311 |
+ sleep 0.1 |
312 |
+ retry_num=$((retry_num-1)) |
313 |
+ done |
314 |
+} |
315 |
+ |
316 |
+main() |
317 |
+{ |
318 |
+ op=$1 |
319 |
+ devpath=$2 |
320 |
+ if [ "$op" = "START" ]; then |
321 |
+ start_displaylink |
322 |
+ elif [ "$op" = "STOP" ]; then |
323 |
+ stop_displaylink $devpath |
324 |
+ fi |
325 |
+} |
326 |
+ |
327 |
+start_service() |
328 |
+{ |
329 |
+ service dlm start |
330 |
+} |
331 |
+ |
332 |
+stop_service() |
333 |
+{ |
334 |
+ service dlm stop |
335 |
+} |
336 |
+main $1 $2 |
337 |
|
338 |
diff --git a/x11-drivers/displaylink-driver/metadata.xml b/x11-drivers/displaylink-driver/metadata.xml |
339 |
new file mode 100644 |
340 |
index 0000000..97df2a0 |
341 |
--- /dev/null |
342 |
+++ b/x11-drivers/displaylink-driver/metadata.xml |
343 |
@@ -0,0 +1,8 @@ |
344 |
+<?xml version="1.0" encoding="UTF-8"?> |
345 |
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> |
346 |
+<pkgmetadata> |
347 |
+ <maintainer type="person"> |
348 |
+ <email>mrueg@g.o</email> |
349 |
+ <name>Manuel Rüger</name> |
350 |
+ </maintainer> |
351 |
+</pkgmetadata> |