Merge lp:~fader/checkbox-qa/expanded-test-coverage into lp:checkbox-qa
- expanded-test-coverage
- Merge into trunk
Proposed by
Ronald McCollam
Status: | Needs review |
---|---|
Proposed branch: | lp:~fader/checkbox-qa/expanded-test-coverage |
Merge into: | lp:checkbox-qa |
Diff against target: | None lines |
To merge this branch: | bzr merge lp:~fader/checkbox-qa/expanded-test-coverage |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Zygmunt Krynicki (community) | Needs Information | ||
Review via email: mp+10648@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
- 9. By Ronald McCollam
-
Added scripts I forgot to copy in before; removed notes to send information to OEM team list
Revision history for this message
Zygmunt Krynicki (zyga) wrote : | # |
Hi, is this still relevant?
review:
Needs Information
Unmerged revisions
- 9. By Ronald McCollam
-
Added scripts I forgot to copy in before; removed notes to send information to OEM team list
- 8. By Ronald McCollam <fader@baltar>
-
Added manual tests for extending audio coverage.
- 7. By Ronald McCollam <fader@baltar>
-
Imported disk benchmark test from OEM team.
- 6. By Ronald McCollam <fader@baltar>
-
Imported firewire and fingerprint reader tests from OEM team.
- 5. By Ronald McCollam <fader@baltar>
-
Imported compiz test from OEM team; initial DVD playback test.
- 4. By Ronald McCollam <fader@baltar>
-
Fixed pipeline issues in audio silence detection
- 3. By Ronald McCollam <fader@baltar>
-
Added audio suite and numerous audio tests, including silence detection
- 2. By Ronald McCollam <fader@baltar>
-
Added KMS and Xorg suites; VT switch test for KMS and some xrandr tests for Xorg.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === added file 'README-audio' |
2 | --- README-audio 1970-01-01 00:00:00 +0000 |
3 | +++ README-audio 2009-08-24 14:57:07 +0000 |
4 | @@ -0,0 +1,44 @@ |
5 | +Something like the below could be used to generate a set of tests for |
6 | +each detected audio device. I'm not yet convinced this is the right |
7 | +approach though -- it might be better to rely on user interaction for |
8 | +this, as it's difficult to determine the capabilities and inputs/outputs |
9 | +of various sound devices programmatically. |
10 | + |
11 | +---------------------------------------- |
12 | + |
13 | +#!/usr/bin/env python |
14 | + |
15 | +f = open('/proc/asound/cards') |
16 | +cards = f.readlines() |
17 | + |
18 | +tests = open('./audio_tests.txt', 'w') |
19 | + |
20 | +# Annoyingly, /proc/asound/cards lists each card on two lines. |
21 | +linectr = 0 |
22 | +cardctr = 0 |
23 | +while linectr < len(cards): |
24 | + tests.write("type: test\n") |
25 | + tests.write("plugin: manual\n") |
26 | + tests.write("name: alsa_record_playback_card" + str(linectr) + "\n") |
27 | + tests.write("requires:\n alsa.type == 'record'\n alsa.type == 'playback'\n") |
28 | + tests.write("command: alsa_record_playback\n") |
29 | + tests.write("description:\n") |
30 | + tests.write(" This test is for the following sound device:\n") |
31 | + tests.write(" .\n") |
32 | + tests.write(" " + cards[linectr].strip() + "\n") |
33 | + tests.write(" " + cards[linectr+1].strip() + "\n") |
34 | + tests.write(" .\n") |
35 | + tests.write(" Connect a microphone to the microphone port of this \\\n") |
36 | + tests.write(" device, if applicable. Connect speakers or headphones \\\n") |
37 | + tests.write(" to this device, if applicable.\\\n") |
38 | + tests.write(" .\n") |
39 | + tests.write(" Click the Test button, then speak into the microphone. \\\n") |
40 | + tests.write(" After a few seconds, your speech will be played back to \\\n") |
41 | + tests.write(" you.\n") |
42 | + tests.write(" .\n") |
43 | + tests.write(" Did you hear your speech played back?\n\n") |
44 | + linectr = linectr + 2 |
45 | + cardctr = cardctr + 1 |
46 | + |
47 | +f.close() |
48 | +tests.close() |
49 | |
50 | === added file 'scripts/audio_detect_silence' |
51 | --- scripts/audio_detect_silence 1970-01-01 00:00:00 +0000 |
52 | +++ scripts/audio_detect_silence 2009-08-24 14:31:19 +0000 |
53 | @@ -0,0 +1,42 @@ |
54 | +#!/bin/bash |
55 | + |
56 | +OUTPUT=`mktemp -u`.wav |
57 | +GST_COMMAND="gst-launch audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! gconfaudiosink" |
58 | +#SOX_COMMAND="rec -q -r 44100 -p | sox -p $OUTPUT silence -l 1 00:00:00.5 -45d -1 00:00:00.5 -45d" |
59 | +REC_COMMAND="rec -q -r 44100 $OUTPUT" |
60 | +SOX_COMMAND="sox $OUTPUT $OUTPUT.1.wav silence -l 1 00:00:00.5 -45d -1 00:00:00.5 -45d" |
61 | + |
62 | +# Start playing a sine wave |
63 | +$GST_COMMAND & |
64 | +GST_PID=$! |
65 | + |
66 | +# Listen for it on the audio input |
67 | +$REC_COMMAND & |
68 | +REC_PID=$! |
69 | + |
70 | +# Wait a bit, then stop playing |
71 | +sleep 2 |
72 | +kill $REC_PID $GST_PID |
73 | + |
74 | +# Look for silence |
75 | +$SOX_COMMAND |
76 | + |
77 | +# See if the filesize > 80 bytes on the output file |
78 | +# (80 bytes is the largest wav file that will be generated for silence, |
79 | +# so if we have that size we detected nothing but silence) |
80 | +FILESIZE=`stat -c%s "$OUTPUT.1.wav"` |
81 | +rm "$OUTPUT" "$OUTPUT.1.wav" |
82 | +if [ "$FILESIZE" == "" ] |
83 | +then |
84 | + echo "Unable to find output file." >&2 |
85 | + exit 2 |
86 | +fi |
87 | + |
88 | +if [ "$FILESIZE" -lt "81" ] |
89 | +then |
90 | + echo "No audio detected." >&2 |
91 | + exit 1 |
92 | +else |
93 | + echo "$FILESIZE bytes of audio recorded." |
94 | + exit 0 |
95 | +fi |
96 | |
97 | === added file 'scripts/compiz-check' |
98 | --- scripts/compiz-check 1970-01-01 00:00:00 +0000 |
99 | +++ scripts/compiz-check 2009-08-24 14:42:52 +0000 |
100 | @@ -0,0 +1,968 @@ |
101 | +#!/bin/bash |
102 | +# Compiz-Check -- script to test if your system is able to run Compiz |
103 | +# |
104 | +# Copyright (c) 2008 Nick Bauermeister <Forlong@gmx.de> |
105 | +# |
106 | +# This program is free software. Feel free to redistribute and/or |
107 | +# modify it under the terms of the GNU General Public License v3 |
108 | +# as published by the Free Software Foundation. |
109 | +# |
110 | +# This program is distributed in the hope that it will be useful |
111 | +# but comes WITHOUT ANY WARRANTY; without even the implied warranty |
112 | +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
113 | +# See the GNU General Public License for more details. |
114 | + |
115 | +VERSION="0.4.5-4" |
116 | + |
117 | +usage() |
118 | +{ |
119 | + printf "\nAbout:\n" |
120 | + printf "%6s Compiz-Check will check if your system satisfies all requirements to\n" |
121 | + printf "%6s run Compiz properly.\n" |
122 | + printf "%6s It will also help you trace back the problem(s) you may be facing.\n\n" |
123 | + printf "%6s Visit\033[1m http://forlong.blogage.de/article/pages/Compiz-Check \033[0m\n" |
124 | + printf "%6s for further information.\n\n" |
125 | + printf "Usage:\n" |
126 | + printf "%6s Run this script without any arguments.\n\n" |
127 | + printf "Available arguments:\n" |
128 | + printf " -h or --help %8s List available arguments and usage (this message).\n" |
129 | + printf " -v or --version %5s Print version of Compiz-Check in use.\n\n" |
130 | +} |
131 | + |
132 | +banana() |
133 | +{ |
134 | + printf "//\\ \nV%2s\\ \n \\%2s\\ \n%2s\\ \033[1;33m.\`-.\n%3s|\\ \`. \`.\n%3s( \\%2s\`. \`-.%24s_,.-:\\ \n%4s\\ \\%3s\`.%2s\`-._%13s__..--' ,-';/\n%5s\\ \`.%3s\`-.%3s\`-..___..---'%3s_.--' ,'/\n%6s\`. \`.%4s\`-._%8s__..--'%4s,' /\n%8s\`. \`-_%4s \`\`--..''%6s _.-' ,'\n%10s\`-_ \`-.___%8s__,--'%3s,'\n%13s\`-.__%2s\`----'''%4s__.-'\n%18s\`--..____..--'\033[0m\n\n" |
135 | +} |
136 | + |
137 | +if [ $# != 0 ]; then |
138 | + case $1 in |
139 | + -h | --help) |
140 | + usage |
141 | + exit 0 |
142 | + ;; |
143 | + -v | --version) |
144 | + echo $VERSION |
145 | + exit 0 |
146 | + ;; |
147 | + --banana) |
148 | + banana |
149 | + exit 0 |
150 | + ;; |
151 | + *) |
152 | + printf "Error, unknown option: \"$1\"\nRun \033[1m$0 --help\033[0m for details.\n" |
153 | + exit 1 |
154 | + ;; |
155 | + esac |
156 | +fi |
157 | + |
158 | +# Exit when running as root |
159 | +if [ "$(whoami)" = root ]; then |
160 | + printf "\n Do not run this script as root, because it might distort its outcome.\n Aborting.\n\n" |
161 | + exit 1 |
162 | +fi |
163 | + |
164 | +# Needed for lspci, because it's not in the $PATH of every distro |
165 | +export PATH=$PATH:/sbin:/usr/sbin |
166 | + |
167 | +# Can't handle more than one graphics card or X server at a time |
168 | +if [ $(lspci | grep VGA -c) -gt 1 ]; then |
169 | + ERROR_DEVICE="graphics chip" |
170 | +elif [ $(xdpyinfo | grep -i dimensions: -c) -gt 1 ]; then |
171 | + ERROR_DEVICE="running X server" |
172 | +fi |
173 | + |
174 | +if [ ! -z "$ERROR_DEVICE" ]; then |
175 | + printf "\n More than one $ERROR_DEVICE detected -- sorry, the script can not handle that.\n Aborting.\n\n" |
176 | + exit 1 |
177 | +fi |
178 | + |
179 | +# Skip system checks if they are harmful or useless |
180 | +SKIP=yes |
181 | + |
182 | +# Coloured output (there are other emphases hardcoded in the script, so |
183 | +# it would be pretty useless changing those here) |
184 | +UNKNOWN="\033[1;31mUnknown\033[0m" |
185 | +OK=" \033[1;32mOK\033[0m " |
186 | +FAIL="\033[1;31mFAIL\033[0m" |
187 | +SKIPPING="\033[33mSKIP\033[0m" |
188 | +WARN="\033[33mWARN\033[0m" |
189 | + |
190 | +# General distribution info file |
191 | +DIST_INFO="/etc/lsb-release" |
192 | + |
193 | +# Detect distribution |
194 | +# If your distro is not on this list, contact me. |
195 | +detect_distro() |
196 | +{ |
197 | + if [ -d /etc/linuxmint ]; then |
198 | + DISTRIB_ID="Linux Mint" |
199 | + return 0 |
200 | + elif [ -r $DIST_INFO ]; then |
201 | + . $DIST_INFO |
202 | + fi |
203 | + |
204 | + if [ -z $DISTRIB_ID ]; then |
205 | + unset DISTRIB_RELEASE |
206 | + if [ -f /etc/arch-release ]; then |
207 | + DISTRIB_ID="Arch Linux" |
208 | + elif [ -r /etc/knoppix-version ]; then |
209 | + DISTRIB_ID="Knoppix" |
210 | + DISTRIB_RELEASE="($(cat /etc/knoppix_version))" |
211 | + elif [ -r /etc/sidux-version ]; then |
212 | + DISTRIB_ID="Sidux" |
213 | + DISTRIB_RELEASE="($(cat /etc/sidux-version | awk '{print $4}'))" |
214 | + elif [ -r /etc/debian_version ]; then |
215 | + DISTRIB_ID="Debian GNU/Linux" |
216 | + DISTRIB_RELEASE="($(cat /etc/debian_version))" |
217 | + elif [ -r /etc/fedora-release ]; then |
218 | + DISTRIB_ID="$(cat /etc/redhat-release)" |
219 | + elif [ -r /etc/gentoo-release ]; then |
220 | + DISTRIB_ID="Gentoo" |
221 | + DISTRIB_RELEASE="($(cat /etc/gentoo-release | awk '{print $5}'))" |
222 | + elif [ -f /etc/lfs-version ]; then |
223 | + DISTRIB_ID="Linux from scratch" |
224 | + elif [ -r /etc/pclinuxos-release ]; then |
225 | + DISTRIB_ID="PCLinuxOS" |
226 | + elif [ -f /etc/mandriva-release ] || [ -f /etc/mandrake-release ]; then |
227 | + DISTRIB_ID="Mandriva" |
228 | + elif [ -f /etc/redhat-release ]; then |
229 | + DISTRIB_ID="RedHat" |
230 | + elif [ -r /etc/vector-version ]; then |
231 | + DISTRIB_ID="VectorLinux" |
232 | + DISTRIB_RELEASE="($(cat /etc/vector-version))" |
233 | + elif [ -r /etc/slackware-version ]; then |
234 | + DISTRIB_ID="$(cat /etc/slackware-version)" |
235 | + elif [ -f /etc/release ]; then |
236 | + DISTRIB_ID="Solaris" |
237 | + elif [ -r /etc/SuSE-release ]; then |
238 | + DISTRIB_ID="$(grep -i suse /etc/SuSE-release)" |
239 | + elif [ -f /etc/yellowdog-release ]; then |
240 | + DISTRIB_ID="YellowDog Linux" |
241 | + elif [ -f /etc/zenwalk-version ]; then |
242 | + DISTRIB_ID="Zenwalk" |
243 | + else |
244 | + DISTRIB_ID="Unknown" |
245 | + fi |
246 | + fi |
247 | +} |
248 | + |
249 | +# Detect desktop environment in use |
250 | +detect_de() |
251 | +{ |
252 | + if [ ! -z $GNOME_DESKTOP_SESSION_ID ]; then |
253 | + DE=GNOME |
254 | + elif [ "$KDE_SESSION_VERSION" = 4 ]; then |
255 | + DE=KDE4 |
256 | + elif [ "$KDE_FULL_SESSION" = true ]; then |
257 | + DE=KDE |
258 | + elif xprop -root _DT_SAVE_MODE | grep ' = \"xfce4\"$' >/dev/null 2>&1 ; then |
259 | + DE=Xfce |
260 | + else |
261 | + DE=Unknown |
262 | + fi |
263 | +} |
264 | + |
265 | +# Detect graphics card |
266 | +detect_video() |
267 | +{ |
268 | + if lspci | grep -q VGA ; then |
269 | + VIDEO=$(lspci | grep VGA | sed 's/.*: //') |
270 | + else |
271 | + VIDEO=$UNKNOWN # TODO abort? |
272 | + fi |
273 | +} |
274 | + |
275 | +XSET=$(command -v xset) |
276 | + |
277 | +# Detect location of the Xorg log file |
278 | +if [ ! -z $XSET ]; then |
279 | + XORG_LOG=$($XSET q | grep "Log file" | awk '{print $3}') |
280 | +fi |
281 | + |
282 | +# Fallback Xorg log |
283 | +if [ -z $XORG_LOG ]; then |
284 | + if [ -f /var/log/Xorg.0.log ]; then |
285 | + XORG_LOG=/var/log/Xorg.0.log |
286 | + fi |
287 | +fi |
288 | + |
289 | +# advise to look for proprietary drivers in Ubuntu |
290 | +detect_driver_manager() |
291 | +{ |
292 | + if [ $(echo "$DISTRIB_RELEASE" | sed 's/\.//g') -gt 710 ] && [ $DE = GNOME ] || [ $DE = Xfce ]; then |
293 | + DRVS_MNGR=hardy-gtk |
294 | + elif [ $(echo "$DISTRIB_RELEASE" | sed 's/\.//g') -gt 710 ] && [ $DE = KDE ]; then |
295 | + DRVS_MNGR=hardy-kde |
296 | + elif [ "$DISTRIB_RELEASE" = "7.10" ] && [ $DE = GNOME ] || [ $DE = Xfce ]; then |
297 | + DRVS_MNGR=gutsy-gtk |
298 | + elif [ "$DISTRIB_RELEASE" = "7.10" ] && [ $DE = KDE ]; then |
299 | + DRVS_MNGR=gutsy-kde |
300 | + elif [ "$DISTRIB_RELEASE" = "7.04" ] && [ $DE = GNOME ] || [ $DE = Xfce ]; then |
301 | + DRVS_MNGR=feisty-gtk |
302 | + fi |
303 | +} |
304 | + |
305 | +# Drivers known to work with Compiz |
306 | +WHITELIST="nvidia intel i810 ati radeon fglrx" |
307 | + |
308 | +# Drivers taken from Hardy's /usr/lib/xorg/modules/drivers/ directory |
309 | +# plus radeonhd, vboxvideo, nouveau and the proprietary one's. |
310 | +# Contact me, if your driver is not on this list. |
311 | +KNOWN_DRIVERS="$WHITELIST apm ark chips cirrus cyrix fbdev glint i128 |
312 | + i740 imstt mga mtx neomagic newport nsc nv openchrome |
313 | + rendition s3virge savage siliconmotion sis sisusb tdfx |
314 | + tga trident tseng vesa vga via vmware vboxvideo voodoo |
315 | + radeonhd s3 nouveau" |
316 | + |
317 | +# Detect driver in use. |
318 | +# TODO not really satisfied with this. Just because the module is |
319 | +# loaded doesn't necessarily mean the driver is properly working. |
320 | +detect_driver() |
321 | +{ |
322 | + if [ -z $XORG_LOG ]; then |
323 | + DRV=$SKIPPING |
324 | + CHECKS=$SKIP |
325 | + SKIP_MESSAGE="Unable to locate your Xorg log" |
326 | + return 1 |
327 | + elif [ ! -r $XORG_LOG ]; then |
328 | + DRV=$SKIPPING |
329 | + CHECKS=$SKIP |
330 | + SKIP_MESSAGE="No permission to read $XORG_LOG" |
331 | + return 1 |
332 | + fi |
333 | + |
334 | + for i in $KNOWN_DRIVERS ; do |
335 | + if grep Loading $XORG_LOG | grep -q "${i}_drv\.so" && |
336 | + ! grep Unloading $XORG_LOG | grep -q "${i}_drv\.so" ; then |
337 | + DRV=$i |
338 | + fi |
339 | + done |
340 | + |
341 | + if [ -z $DRV ]; then |
342 | + DRV=$UNKNOWN |
343 | + return 0 |
344 | + fi |
345 | + |
346 | +# glxinfo might kill X if vesa or vga are in use (LP#119341) |
347 | +# 'LIBGL_ALWAYS_INDIRECT=1 glxinfo' kills X on openchrome driver |
348 | +# according to user feedback (same for unichrome) |
349 | +# nv driver blocks AIGLX |
350 | + case $DRV in |
351 | + vesa | vga | nv) |
352 | + CHECKS=$SKIP |
353 | + SKIP_MESSAGE="$DRV driver in use" |
354 | + ERROR_MESSAGE="The $DRV driver is not capable of running Compiz, you need to install\n the proper driver for your graphics card." |
355 | + if [ "$DISTRIB_ID" = Ubuntu ]; then |
356 | + detect_driver_manager |
357 | + fi |
358 | + ;; |
359 | + unichrome | openchrome) |
360 | + CHECKS=$SKIP |
361 | + SKIP_MESSAGE="$DRV driver in use" #TODO ERROR_MESSAGE |
362 | + ;; |
363 | + esac |
364 | +} |
365 | + |
366 | +# Detect rendering method |
367 | +detect_rendering() |
368 | +{ |
369 | + XVINFO=$(command -v xvinfo) |
370 | + |
371 | + if [ ! -z $XVINFO ]; then |
372 | + if $XVINFO | grep -q Xgl ; then |
373 | + RENDER=Xgl |
374 | + return 0 |
375 | + fi |
376 | + fi |
377 | + |
378 | + if xdpyinfo | grep -q NV-GLX ; then |
379 | + RENDER=Nvidia |
380 | + return 0 |
381 | + fi |
382 | + |
383 | + AIGLX_STAT="AIGLX enabled\|AIGLX disabled" |
384 | + |
385 | + if [ -z $XORG_LOG ] || [ ! -r $XORG_LOG ]; then |
386 | + RENDER=$SKIPPING |
387 | + return 1 |
388 | + elif grep "$AIGLX_STAT" $XORG_LOG | tail -1 | grep -q "AIGLX enabled" ; then |
389 | + RENDER=AIGLX |
390 | + return 0 |
391 | + fi |
392 | + |
393 | + if [ -z $XVINFO ]; then |
394 | + RENDER=$SKIPPING |
395 | + CHECKS=$SKIP |
396 | + SKIP_MESSAGE="Unable to check for Xgl, could not run xvinfo" |
397 | + else |
398 | + RENDER="\033[31mNone\033[0m" |
399 | + CHECKS=$SKIP # Checks can be OK nonetheless |
400 | + SKIP_MESSAGE="No rendering method in use (AIGLX, Xgl or Nvidia)" |
401 | + fi |
402 | +} |
403 | + |
404 | +GLXINFO=$(command -v glxinfo) |
405 | + |
406 | +# Check for texture_from_pixmap |
407 | +check_tfp() |
408 | +{ |
409 | + if [ "$RENDER" = Xgl ]; then |
410 | + TFP=$SKIPPING |
411 | + return 0 |
412 | + elif [ -z $GLXINFO ]; then |
413 | + TFP=$SKIPPING |
414 | + SKIP_MESSAGE="glxinfo not installed" |
415 | + ERROR_MESSAGE="The program glxinfo is needed to perform a number of crucial tests." |
416 | + if [ -e /etc/debian_version ]; then |
417 | + DIST_HELP="You need to install the package \033[1mmesa-utils\033[0m\n Type e.g. \033[1msudo apt-get install mesa-utils\033[0m to install it." |
418 | + elif [ -e /etc/mandriva-release ]; then |
419 | + DIST_HELP="You need to install \033[1mmesa-demos\033[0m\n" |
420 | + fi |
421 | + return 0 |
422 | + fi |
423 | + |
424 | + if [ $(glxinfo 2>/dev/null | grep GLX_EXT_texture_from_pixmap -c) -gt 2 ]; then |
425 | + TFP=$OK |
426 | + elif [ $(LIBGL_ALWAYS_INDIRECT=1 glxinfo 2>/dev/null | grep GLX_EXT_texture_from_pixmap -c) -gt 2 ]; then |
427 | + TFP=$OK |
428 | + else |
429 | + TFP=$FAIL |
430 | + fi |
431 | +} |
432 | + |
433 | +# Check for non power of two texture support |
434 | +check_npo2() |
435 | +{ |
436 | + if [ "$RENDER" = Xgl ] || [ -z $GLXINFO ]; then |
437 | + NPO2=$SKIPPING |
438 | + elif glxinfo 2>/dev/null | egrep -q '(GL_ARB_texture_non_power_of_two|GL_NV_texture_rectangle|GL_EXT_texture_rectangle|GL_ARB_texture_rectangle)' ; then |
439 | + NPO2=$OK |
440 | + else |
441 | + NPO2=$FAIL |
442 | + fi |
443 | +} |
444 | + |
445 | +# Check for composite extension |
446 | +check_composite() |
447 | +{ |
448 | + if xdpyinfo -queryExtensions | grep -q Composite ; then |
449 | + COMP=$OK |
450 | + else |
451 | + COMP=$FAIL |
452 | + fi |
453 | +} |
454 | + |
455 | +# Check for FBConfig |
456 | +check_fbconfig() |
457 | +{ |
458 | + if [ -z $GLXINFO ]; then |
459 | + FBC=$SKIPPING |
460 | + elif glxinfo 2>/dev/null | grep -q GLX.*fbconfig ; then |
461 | + FBC=$OK |
462 | + elif [ "$DRV" = via ]; then |
463 | + FBC=$SKIPPING # 'glxinfo -i' kills X on some setups using the via driver |
464 | + elif glxinfo -i 2>/dev/null | grep -q GLX.*fbconfig ; then |
465 | + FBC=$OK |
466 | + else |
467 | + FBC=$FAIL |
468 | + fi |
469 | +} |
470 | + |
471 | +# Check if fglrx driver supports composite |
472 | +check_fglrx() |
473 | +{ |
474 | + if [ "$DRV" = fglrx ]; then |
475 | + FGLRXINFO=$(command -v fglrxinfo) |
476 | + if [ ! -z "$FGLRXINFO" ]; then |
477 | + if $FGLRXINFO | grep -q mesa ; then |
478 | + STATUS=$FAIL |
479 | + ERROR="Fglrx driver not properly installed, you are using the Mesa driver." |
480 | + return 0 |
481 | + else |
482 | + DIGITS=$($FGLRXINFO | grep version | sed 's/[a-Z:(.)]//g') |
483 | + for i in $DIGITS ; do |
484 | + if [ $i -gt 100000 ]; then |
485 | + FGLRX_VERSION=$i |
486 | + fi |
487 | + done |
488 | + FGLRX_COMPOSITE=206958 # 2.0.6958 first release to support AIGLX |
489 | + if [ ! -z $FGLRX_VERSION ]; then |
490 | + if [ $FGLRX_VERSION -lt $FGLRX_COMPOSITE ] && [ "$RENDER" != Xgl ]; then |
491 | + STATUS=$FAIL |
492 | + ERROR="The version of fglrx in use needs Xgl to work with Compiz." |
493 | + ERROR_MESSAGE="Older versions of fglrx do not support AIGLX, so you have to use Xgl in order\n to make Compiz run with this driver.\n You can either install Xgl or a newer version of the fglrx driver." |
494 | + if [ "$DISTRIB_ID" = Ubuntu ]; then |
495 | + if [ $(echo "$DISTRIB_RELEASE" | sed 's/\.//g') -gt 704 ]; then |
496 | + DIST_HELP="Type \033[1msudo apt-get install xserver-xgl\033[0m to install Xgl." |
497 | + fi |
498 | + fi |
499 | + return 0 |
500 | + fi |
501 | + return 1 |
502 | + fi |
503 | + STATUS=$SKIPPING |
504 | + SKIP_MESSAGE="Unable to detect fglrx driver version in use." |
505 | + return 0 |
506 | + fi |
507 | + fi |
508 | + STATUS=$FAIL |
509 | + ERROR="Fglrx driver not properly installed. Could not run fglrxinfo." |
510 | + return 0 |
511 | + fi |
512 | + |
513 | + return 1 |
514 | +} |
515 | + |
516 | +if [ -z $XDG_CONFIG_DIRS ]; then |
517 | + XDG_CONFIG_DIRS=/etc/xdg |
518 | +fi |
519 | + |
520 | +if [ -z $XDG_CONFIG_HOME ]; then |
521 | + XDG_CONFIG_HOME=$HOME/.config |
522 | +fi |
523 | + |
524 | +COMPIZ_MNGR_HOME=$XDG_CONFIG_HOME/compiz/compiz-manager |
525 | + |
526 | +# Check if checks are skipped (by compiz-manager, not here!) |
527 | +check_skip() |
528 | +{ |
529 | + OLD_IFS=$IFS |
530 | + IFS=: |
531 | + for m in $XDG_CONFIG_DIRS |
532 | + do |
533 | + test -r $m/compiz/compiz-manager && . $m/compiz/compiz-manager |
534 | + done |
535 | + IFS=$OLD_IFS |
536 | + unset OLD_IFS |
537 | + |
538 | + if [ -r $COMPIZ_MNGR_HOME ]; then |
539 | + . $COMPIZ_MNGR_HOME |
540 | + fi |
541 | + |
542 | + if [ "$SKIP_CHECKS" = yes ]; then |
543 | + return 1 |
544 | + fi |
545 | + |
546 | + return 0 |
547 | +} |
548 | + |
549 | +# Check max texture size compared to resolution in use |
550 | +check_resolution() |
551 | +{ |
552 | + if [ -z $GLXINFO ]; then |
553 | + STATUS=$SKIPPING |
554 | + return 0 |
555 | + fi |
556 | + |
557 | + TEXTURE_LIMIT=$(glxinfo -l 2>/dev/null | grep GL_MAX_TEXTURE_SIZE | sed 's/.*=[^0-9]//g') |
558 | + RESOLUTION=$(xdpyinfo | grep -i dimensions: | sed 's/[^0-9]*pixels.*(.*).*//' | sed 's/[^0-9x]*//') |
559 | + VRES=$(echo $RESOLUTION | sed 's/.*x//') |
560 | + HRES=$(echo $RESOLUTION | sed 's/x.*//') |
561 | + |
562 | + if [ -z $TEXTURE_LIMIT ]; then |
563 | + STATUS=$SKIPPING |
564 | + SKIP_MESSAGE="Unable to detect maximum 3D texture size" |
565 | + return 0 |
566 | + elif [ $VRES -gt $TEXTURE_LIMIT ] || [ $HRES -gt $TEXTURE_LIMIT ]; then |
567 | + STATUS=$FAIL |
568 | + ERROR="Your current resolution is too high to run Compiz." |
569 | + ERROR_MESSAGE="Your resolution is \033[1m${RESOLUTION}\033[0m but the maximum 3D texture size that your\n graphics card is capable of is \033[1m${TEXTURE_LIMIT}x${TEXTURE_LIMIT}\033[0m. Thus Compiz will not be able to run\n on this setup. You have to decrease the resolution first (in case you are\n using a dual-head setup, try disabling one monitor and run the script again)." |
570 | + return 0 |
571 | + fi |
572 | + |
573 | + return 1 |
574 | +} |
575 | + |
576 | + |
577 | +# Check if there is already another compositing manager running |
578 | +check_compositor() |
579 | +{ |
580 | + XCOMPMGR_PID=$(ps -o pid= -C xcompmgr) |
581 | + METACITY_PID=$(ps -o pid= -C metacity) |
582 | + XFWM_PID=$(ps -o pid= -C xfwm4) |
583 | + |
584 | + if [ ! -z $XCOMPMGR_PID ]; then |
585 | + OTHER_COMP=true |
586 | + COMP_MSG="It has been detected, that you are currently running \033[1mxcompmgr\033[0m, which is a\n standalone compositing manager." |
587 | + QUERY_XCOMPMGR=yes |
588 | + elif [ ! -z $METACITY_PID ]; then |
589 | + METACITY=$(command -v metacity) |
590 | + if [ ! -z $METACITY ]; then |
591 | + if [ $($METACITY --version | grep metacity | awk '{print $2}' | sed 's/\.//g') -gt 2200 ]; then |
592 | + GCONFTOOL=$(command -v gconftool-2) |
593 | + if [ ! -z $GCONFTOOL ]; then |
594 | + if $GCONFTOOL -a /apps/metacity/general | grep -q compositing_manager && |
595 | + [ "$($GCONFTOOL -g /apps/metacity/general/compositing_manager)" = true ]; then |
596 | + OTHER_COMP=true |
597 | + WM_COMP=GNOME |
598 | + QUERY_METACITY=yes |
599 | + fi |
600 | + fi |
601 | + fi |
602 | + fi |
603 | + elif [ ! -z $XFWM_PID ]; then |
604 | + if [ -r $XDG_CONFIG_HOME/xfce4/mcs_settings/wmtweaks.xml ]; then |
605 | + if grep UseCompositing $XDG_CONFIG_HOME/xfce4/mcs_settings/wmtweaks.xml | grep -q 'value="1"' && |
606 | + ! ps -ef | grep xfwm4 | grep -q compositor=off ; then |
607 | + OTHER_COMP=true |
608 | + WM_COMP=Xfce |
609 | + QUERY_XFWM=yes |
610 | + fi |
611 | + fi |
612 | + fi |
613 | + |
614 | + if [ ! -z $OTHER_COMP ]; then |
615 | + ERROR="Another compositing manager in use." |
616 | + if [ ! -z $WM_COMP ]; then |
617 | + COMP_MSG="The default window manager of $WM_COMP has its own compositing manager to\n provide basic desktop effects." |
618 | + fi |
619 | + ERROR_MESSAGE="${COMP_MSG}\n If this one is in use, Compiz will not be able to run." |
620 | + return 0 |
621 | + fi |
622 | + |
623 | + return 1 |
624 | +} |
625 | + |
626 | +# Hardy blacklists laptops using ati/radeon driver (LP#201330) |
627 | +check_laptop_ati() |
628 | +{ |
629 | + if [ "$DISTRIB_ID $DISTRIB_RELEASE" = "Ubuntu 8.04" ]; then |
630 | + if [ "$DRV" = ati ] || [ "$DRV" = radeon ] ; then |
631 | + if laptop-detect && check_skip ; then |
632 | + ERROR="Laptop using $DRV driver." |
633 | + ERROR_MESSAGE="It has been detected, that you are running a laptop with an ATI chip.\n The $DRV driver supports Compiz out-of-the-box but because of a nasty bug\n in the driver that causes X to freeze on some cards, this particular\n combination had to be blacklisted in Ubuntu \"Hardy Heron\".\n\n In case you already used Compiz successfully on Ubuntu 7.10 (Gutsy), it is\n safe to skip the blacklist." |
634 | + QUERY_SKIP=yes |
635 | + return 0 |
636 | + fi |
637 | + fi |
638 | + fi |
639 | + |
640 | + return 1 |
641 | +} |
642 | + |
643 | +# Check if "Composite" has been disabled in the xorg.conf |
644 | +check_cmpst_xorg() |
645 | +{ |
646 | + if [ "$COMP" = "$OK" ]; then |
647 | + return 1 |
648 | + fi |
649 | + |
650 | + # Detect location of the Xorg log file |
651 | + if [ ! -z $XSET ]; then |
652 | + XORG_CONF=$($XSET q | grep "Config file" | awk '{print $3}') |
653 | + fi |
654 | + |
655 | + # Fallback xorg.conf |
656 | + if [ -z $XORG_CONF ]; then |
657 | + if [ -f /etc/X11/xorg.conf ]; then |
658 | + XORG_CONF=/etc/X11/xorg.conf |
659 | + else |
660 | + return 1 |
661 | + fi |
662 | + fi |
663 | + |
664 | + if [ ! -r $XORG_CONF ]; then |
665 | + SKIP_MESSAGE="No permission to read $XORG_CONF" |
666 | + return 1 |
667 | + else |
668 | + CMPST=$(grep -i "Composite" $XORG_CONF) |
669 | + if echo $CMPST | grep -qi "0" ; then |
670 | + COMPST_STAT='"0"' |
671 | + COMPST_FIX='"1"' |
672 | + elif echo $CMPST | grep -qi "Disable" ; then |
673 | + COMPST_STAT='"Disable"' |
674 | + COMPST_FIX='"Enable"' |
675 | + elif echo $CMPST | grep -qi "false" ; then |
676 | + COMPST_STAT='"false"' |
677 | + COMPST_FIX='"true"' |
678 | + fi |
679 | + fi |
680 | + |
681 | + case $DE in |
682 | + GNOME) |
683 | + EDITOR=gedit |
684 | + ;; |
685 | + KDE4 | KDE) |
686 | + EDITOR=kate |
687 | + ;; |
688 | + Xfce) |
689 | + EDITOR=mousepad |
690 | + ;; |
691 | + esac |
692 | + |
693 | + if [ ! -z $COMPST_STAT ]; then |
694 | + ERROR="Composite manually disabled" |
695 | + ERROR_MESSAGE="It has been detected that the \"Composite\" option of your ${XORG_CONF}\n has been set to $COMPST_STAT" |
696 | + if [ "$DRV" = fglrx ] && [ $FGLRX_VERSION -lt $FGLRX_COMPOSITE ]; then |
697 | + return 0 |
698 | + fi |
699 | + if [ ! -z $EDITOR ] && [ -x $EDITOR ]; then |
700 | + DIST_HELP="Open the file being root, e.g. \033[1msudo $EDITOR $XORG_CONF\033[0m\n Then change $COMPST_STAT to $COMPST_FIX and save. Finally restart X and try again." |
701 | + else |
702 | + DIST_HELP="Open the file being root and change $COMPST_STAT to $COMPST_FIX\n Then restart X and try again." |
703 | + fi |
704 | + return 0 |
705 | + fi |
706 | + |
707 | + return 1 |
708 | +} |
709 | + |
710 | +# Check for Software Rasterizer |
711 | +check_rasterizer() |
712 | +{ |
713 | + if glxinfo 2>/dev/null | grep -q 'OpenGL renderer string: Software Rasterizer' ; then |
714 | + ERROR="Software Rasterizer in use" #TODO add $ERROR_MESSAGE |
715 | + return 0 |
716 | + else |
717 | + return 1 |
718 | + fi |
719 | +} |
720 | + |
721 | +DISCLAIMER="You can skip this blacklist -- but keep in mind that you did so.\n Do not complain if you encounter any problems with Compiz afterwards." |
722 | + |
723 | +# Check if driver in use is on the whitelist |
724 | +check_whitelist() |
725 | +{ |
726 | + for i in $WHITELIST ; do |
727 | + if [ "$DRV" = "$i" ]; then |
728 | + return 1 |
729 | + fi |
730 | + done |
731 | + |
732 | + if [ "$DRV" = "$UNKNOWN" ]; then |
733 | + DRV_MSG="Unknown driver in use." |
734 | + else |
735 | + DRV_MSG="Detected driver is not on the whitelist." |
736 | + fi |
737 | + |
738 | + if [ "$TFP" = "$OK" -o "$SKIPPING" ] && [ "$NPO2" = "$OK" -o "$SKIPPING" ] && |
739 | + [ "$COMP" = "$OK" ] && [ "$FBC" = "$OK" -o "$SKIPPING" ]; then |
740 | + if ! check_skip ; then |
741 | + return 1 |
742 | + fi |
743 | + STATUS=$WARN |
744 | + WARNING=$DRV_MSG |
745 | + ERROR_MESSAGE="Your driver is not widely known to work with Compiz and thus may be\n blacklisted on certain distributions.\n\n $DISCLAIMER" |
746 | + QUERY_SKIP=yes |
747 | + return 0 |
748 | + elif [ "$DRV" = vmware ] || [ "$DRV" = vboxvideo ]; then |
749 | + STATUS=$FAIL |
750 | + ERROR="$DRV driver in use" |
751 | + ERROR_MESSAGE="Compiz can not be run in a virtual environment." |
752 | + return 0 |
753 | + fi |
754 | + |
755 | + STATUS=$FAIL |
756 | + ERROR=$DRV_MSG |
757 | + ERROR_MESSAGE="Your driver is not known (most probably not able) to work with Compiz.\n See http://wiki.compiz-fusion.org/Hardware for details." |
758 | + |
759 | + if [ "$DISTRIB_ID" = Ubuntu ]; then |
760 | + detect_driver_manager |
761 | + fi |
762 | + |
763 | + return 0 |
764 | +} |
765 | + |
766 | +# PCI IDs that may be blacklist on certain distributions |
767 | +# List taken from Gutsy |
768 | +GUTSY_BLACKLIST="1002:5954 1002:5854 1002:5955 1002:4153 8086:2982 8086:2992 |
769 | + 8086:29a2 8086:2a02 8086:2a12 8086:2972 1002:3152 1002:3150 |
770 | + 1002:5462 1002:5653" |
771 | +# Blacklisted IDs on Intrepid |
772 | +BLACKLISTED_PCIIDS="$GUTSY_BLACKLIST 8086:1132 8086:2e02 8086:3577 8086:2562" |
773 | + |
774 | +# My own private PCI IDs (added for testing reasons) |
775 | +# Please let me know if I really was that stupid to let those in here. |
776 | +#BLACKLISTED_PCIIDS="$BLACKLISTED_PCIIDS 1002:4152 1002:4e50" |
777 | + |
778 | +# Check if PCI ID in use is on the blacklist |
779 | +check_pciid() |
780 | +{ |
781 | + if [ "$DISTRIB_ID" = Ubuntu ] && [ "$DISTRIB_RELEASE" = "8.04" ]; then |
782 | + return 1 |
783 | + fi |
784 | + |
785 | + for PCIID in $BLACKLISTED_PCIIDS ; do |
786 | + if $(lspci -n | grep -q "$PCIID") && check_skip ; then |
787 | + STATUS=$WARN |
788 | + WARNING="PCI ID \033[1m${PCIID}\033[0m detected." |
789 | + ERROR_MESSAGE="Your particular graphics chip may be blacklisted on certain distributions.\n However that does not necessarily mean you will not be able to run Compiz.\n\n $DISCLAIMER" |
790 | + QUERY_SKIP=yes |
791 | + return 0 |
792 | + fi |
793 | + done |
794 | + |
795 | + return 1 |
796 | +} |
797 | + |
798 | +# Check for needed xdg files in Ubuntu |
799 | +check_xdg() |
800 | +{ |
801 | + if [ "$DISTRIB_ID" = Ubuntu ]; then |
802 | + if [ $(echo "$DISTRIB_RELEASE" | sed 's/\.//g') -gt 704 ]; then |
803 | + XDG_COMPIZ=/etc/xdg/compiz |
804 | + if [ ! -e $XDG_COMPIZ/compiz-manager ] && [ -e /usr/bin/compiz.real ]; then |
805 | + check_skip |
806 | + if [ "$COMPIZ_BIN_PATH" = /usr/bin/ ] && [ "$COMPIZ_NAME" = compiz.real ] && |
807 | + [ "$PLUGIN_PATH" = /usr/lib/compiz/ ]; then |
808 | + return 1 |
809 | + else |
810 | + STATUS=$WARN |
811 | + WARNING="No path to Compiz found." |
812 | + ERROR_MESSAGE="In case you did not compile Compiz manually, this will result in Compiz\n failing to run." |
813 | + if [ -d $XDG_COMPIZ ]; then |
814 | + BACKUP=$(echo $(ls $XDG_COMPIZ | grep "compiz-manager\.") | awk '{print $1}') |
815 | + fi |
816 | + if [ ! -z $BACKUP ] ; then |
817 | + DIST_HELP="You can try to fix this, by typing the following command in the terminal:\n\033[1msudo mv $XDG_COMPIZ/$BACKUP $XDG_COMPIZ/compiz-manager\033[0m" |
818 | + fi |
819 | + return 0 |
820 | + fi |
821 | + fi |
822 | + fi |
823 | + fi |
824 | + |
825 | + return 1 |
826 | +} |
827 | + |
828 | +# Check if Nvidia card in use has enough memory |
829 | +check_nvidia_mem() |
830 | +{ |
831 | + if [ "$DRV" = nvidia ]; then |
832 | + if [ "$RENDER" = Xgl ]; then |
833 | + STATUS=$SKIPPING |
834 | + SKIP_MESSAGE="Xgl on Nvidia chip." |
835 | + return 0 |
836 | + fi |
837 | + NVIDIA_SETTINGS=$(command -v nvidia-settings) |
838 | + if [ ! -z $NVIDIA_SETTINGS ] ; then |
839 | + MEM=$($NVIDIA_SETTINGS -q VideoRam | egrep Attribute\ \'VideoRam\'\ .*: | cut -d: -f3 | sed 's/[^0-9]//g') |
840 | + NVIDIA_MEMORY=65536 # 64MB |
841 | + if [ "$MEM" -lt $NVIDIA_MEMORY ] && check_skip ; then |
842 | + STATUS=$WARN |
843 | + WARNING="Nvidia card has not enough memory ($MEM KB) to run Compiz properly." |
844 | + ERROR_MESSAGE="It is not recommended to run Compiz on a Nvidia chip with such a low amount\n of memory. Because of that, your hardware may be blacklisted on certain\n distributions.\n\n $DISCLAIMER" |
845 | + QUERY_SKIP=yes |
846 | + return 0 |
847 | + fi |
848 | + return 1 |
849 | + fi |
850 | + STATUS=$SKIPPING |
851 | + SKIP_MESSAGE="Could not check the amount of memory on your Nvidia chip." |
852 | + ERROR_MESSAGE="That does \033[1mnot\033[0m mean, you will not be able to use Compiz.\n If everything else went OK you are most probably fine.\n\n In case you want the script to check this step as well, install the program\n \033[1mnvidia-settings\033[0m on your system." |
853 | + return 0 |
854 | + fi |
855 | + |
856 | + return 1 |
857 | +} |
858 | + |
859 | +# Check for proprietary driver (Ubuntu only) |
860 | +check_prop_driver() |
861 | +{ |
862 | + printf "Check if there's an alternate (proprietary) driver available? (Y/n) " |
863 | + read REPLY |
864 | + case $REPLY in |
865 | + "" | y | Y | yes | Yes) |
866 | + case $DRVS_MNGR in |
867 | + hardy-gtk) |
868 | + exec gksu jockey-gtk & exit 0 |
869 | + ;; |
870 | + hardy-kde) |
871 | + exec kdesu jockey-kde & exit 0 |
872 | + ;; |
873 | + gutsy-gtk) |
874 | + exec gksu restricted-manager & exit 0 |
875 | + ;; |
876 | + gutsy-kde) |
877 | + exec kdesu resrticted-manager-kde & exit 0 |
878 | + ;; |
879 | + feisty-gtk) |
880 | + exec gksu restricted-manager & exit 0 |
881 | + ;; |
882 | + esac |
883 | + ;; |
884 | + n | N | no | No) |
885 | + exit 0 |
886 | + ;; |
887 | + *) |
888 | + check_prop_driver |
889 | + ;; |
890 | + esac |
891 | +} |
892 | + |
893 | +# Query if the user wants to skip checks in compiz-manager |
894 | +query_skip_checks() |
895 | +{ |
896 | + printf "Do you want to skip blacklist checks by Compiz? (y/N) " |
897 | + read REPLY |
898 | + case $REPLY in |
899 | + y | Y | yes | Yes) |
900 | + mkdir -p $XDG_CONFIG_HOME/compiz |
901 | + echo SKIP_CHECKS=yes >> $COMPIZ_MNGR_HOME |
902 | + ;; |
903 | + "" | n | N | no | No) |
904 | + exit 0 |
905 | + ;; |
906 | + *) |
907 | + query_skip_checks |
908 | + ;; |
909 | + esac |
910 | +} |
911 | + |
912 | +# Query if the user wants to kill xcompmgr |
913 | +query_xcompmgr() |
914 | +{ |
915 | + printf "Do you want to disable xcompmgr? (Y/n) " |
916 | + read REPLY |
917 | + case $REPLY in |
918 | + "" | y | Y | yes | Yes) |
919 | + kill $XCOMPMGR_PID |
920 | + ;; |
921 | + n | N | no | No) |
922 | + exit 0 |
923 | + ;; |
924 | + *) |
925 | + query_xcompmgr |
926 | + ;; |
927 | + esac |
928 | +} |
929 | + |
930 | +# Query to disable Metacity's compositing manager |
931 | +query_metacity_comp() |
932 | +{ |
933 | + printf "Do you want to disable GNOME's compositing manager? (Y/n) " |
934 | + read REPLY |
935 | + case $REPLY in |
936 | + "" | y | Y | yes | Yes) |
937 | + $GCONFTOOL -s -t bool /apps/metacity/general/compositing_manager false |
938 | + kill -9 $METACITY_PID 2>/dev/null |
939 | + exec $METACITY --replace & |
940 | + ;; |
941 | + n | N | no | No) |
942 | + exit 0 |
943 | + ;; |
944 | + *) |
945 | + query_metacity_comp |
946 | + ;; |
947 | + esac |
948 | +} |
949 | + |
950 | +# Query if the user wants to disable Xfwm's compsitor |
951 | +query_xfwm_comp() |
952 | +{ |
953 | + printf "Do you want to disable Xfce's compositing manager? (Y/n) " |
954 | + read REPLY |
955 | + case $REPLY in |
956 | + "" | y | Y | yes | Yes) |
957 | + kill $XFWM_PID |
958 | + sleep 1 |
959 | + exec xfwm4 --compositor=off --daemon & |
960 | + exit 0 |
961 | + ;; |
962 | + n | N | no | No) |
963 | + exit 0 |
964 | + ;; |
965 | + *) |
966 | + query_xfwm_comp |
967 | + ;; |
968 | + esac |
969 | +} |
970 | + |
971 | +# Ask user to print additional info (Starship Troopers style). |
972 | +more_info() |
973 | +{ |
974 | + printf "Would you like to know more? (Y/n) " |
975 | + read REPLY |
976 | + case $REPLY in |
977 | + "" | y | Y | yes | Yes) |
978 | + return 0 |
979 | + ;; |
980 | + n | N | no | No) |
981 | + return 1 |
982 | + ;; |
983 | + *) |
984 | + more_info |
985 | + ;; |
986 | + esac |
987 | +} |
988 | + |
989 | +# --- Output starts here --- |
990 | + |
991 | +# System info |
992 | +printf "\nGathering information about your system...\n\n" |
993 | +detect_distro |
994 | +printf " Distribution: %9s\033[1m${DISTRIB_ID} ${DISTRIB_RELEASE}\033[0m\n" |
995 | +detect_de |
996 | +printf " Desktop environment: %2s\033[1m${DE}\033[0m\n" |
997 | +detect_video |
998 | +printf " Graphics chip: %8s\033[1m${VIDEO}\033[0m\n" |
999 | +detect_driver |
1000 | +printf " Driver in use: %8s\033[1m${DRV}\033[0m\n" |
1001 | +detect_rendering |
1002 | +printf " Rendering method: %5s\033[1m${RENDER}\033[0m\n" |
1003 | + |
1004 | +# System checks |
1005 | +printf "\nChecking if it's possible to run Compiz on your system..." |
1006 | +if [ "$CHECKS" = yes ]; then |
1007 | + printf "%2s[${SKIPPING}]\n\n" |
1008 | +else |
1009 | + printf "\n\n Checking for texture_from_pixmap..." |
1010 | + check_tfp |
1011 | + printf "%15s[${TFP}]\n" |
1012 | + printf " Checking for non power of two support..." |
1013 | + check_npo2 |
1014 | + printf "%10s[${NPO2}]\n" |
1015 | + printf " Checking for composite extension..." |
1016 | + check_composite |
1017 | + printf "%15s[${COMP}]\n" |
1018 | + printf " Checking for FBConfig..." |
1019 | + check_fbconfig |
1020 | + printf "%26s[${FBC}]\n" |
1021 | +fi |
1022 | + |
1023 | +# Hardware checks |
1024 | +printf " Checking for hardware/setup problems..." |
1025 | +if [ "$CHECKS" = yes ]; then |
1026 | + printf "%11s[${SKIPPING}]\n\n" |
1027 | +elif check_compositor || check_laptop_ati || check_cmpst_xorg || check_rasterizer ; then |
1028 | + printf "%11s[${FAIL}]\n\n" |
1029 | +elif check_fglrx || check_whitelist || check_resolution || check_xdg || check_pciid || check_nvidia_mem ; then |
1030 | + printf "%11s[${STATUS}]\n\n" |
1031 | +else |
1032 | + printf "%11s[${OK}]\n\n" |
1033 | +fi |
1034 | + |
1035 | +# Print error or warning (if any) |
1036 | +# The $ERROR, $WARNING and $SKIP_MESSAGE outputs are supposed to be a |
1037 | +# short description of the respective error. |
1038 | +if [ "x$ERROR" != "x" ]; then |
1039 | + printf "There has been (at least) one error detected with your setup:\n \033[31mError:\033[0m $ERROR \n\n" |
1040 | +elif [ "x$WARNING" != "x" ]; then |
1041 | + printf "Something potential problematic has been detected with your setup:\n \033[33mWarning:\033[0m $WARNING \n\n" |
1042 | +elif [ "x$SKIP_MESSAGE" != "x" ]; then |
1043 | + printf "At least one check had to be skipped:\n \033[33mError:\033[0m $SKIP_MESSAGE \n\n" |
1044 | +fi |
1045 | + |
1046 | +# Interactive output begins here |
1047 | +if [ "x$ERROR_MESSAGE" != "x" ] && more_info ; then |
1048 | + printf "\n $ERROR_MESSAGE \n\n" |
1049 | + if [ ! -z $QUERY_SKIP ]; then |
1050 | + query_skip_checks |
1051 | + elif [ ! -z $QUERY_XCOMPMGR ]; then |
1052 | + query_xcompmgr |
1053 | + elif [ ! -z $QUERY_METACITY ]; then |
1054 | + query_metacity_comp |
1055 | + elif [ ! -z $QUERY_XFWM ]; then |
1056 | + query_xfwm_comp |
1057 | + elif [ "x$DRVS_MNGR" != "x" ]; then |
1058 | + check_prop_driver |
1059 | + elif [ "x$DIST_HELP" != "x" ]; then |
1060 | + printf " $DIST_HELP \n\n" |
1061 | + fi |
1062 | +fi |
1063 | + |
1064 | +# If there was an error, return an error code |
1065 | +if [ "x$ERROR" != "x" ]; then |
1066 | + exit 1 |
1067 | +fi |
1068 | +exit 0 |
1069 | |
1070 | === added file 'scripts/cycle_vts.py' |
1071 | --- scripts/cycle_vts.py 1970-01-01 00:00:00 +0000 |
1072 | +++ scripts/cycle_vts.py 2009-08-24 13:12:46 +0000 |
1073 | @@ -0,0 +1,21 @@ |
1074 | +#!/bin/bash |
1075 | + |
1076 | +# NB: This script must be run with root privileges in order to have any effect! |
1077 | + |
1078 | +CURRENT_VT=`/bin/fgconsole` |
1079 | + |
1080 | +if [ "$CURRENT_VT" == "" ] |
1081 | +then |
1082 | + echo "Unable to determine current virtual terminal." >&2 |
1083 | + exit 1 |
1084 | +fi |
1085 | + |
1086 | +if [ "$CURRENT_VT" -ne "1" ] |
1087 | +then |
1088 | + chvt 1 |
1089 | +else |
1090 | + chvt 2 |
1091 | +fi |
1092 | + |
1093 | +sleep 2 |
1094 | +chvt "$CURRENT_VT" |
1095 | |
1096 | === added file 'scripts/disk_bench_test.py' |
1097 | --- scripts/disk_bench_test.py 1970-01-01 00:00:00 +0000 |
1098 | +++ scripts/disk_bench_test.py 2009-08-24 14:48:22 +0000 |
1099 | @@ -0,0 +1,18 @@ |
1100 | +#!/usr/bin/python |
1101 | +import sys |
1102 | +from subprocess import Popen, PIPE |
1103 | + |
1104 | +def main(): |
1105 | + output = Popen('hdparm -tT /dev/sda', |
1106 | + stdout=PIPE, shell=True).communicate()[0] |
1107 | + |
1108 | + for line in output.splitlines()[-2:]: |
1109 | + line = line.lstrip() |
1110 | + line = ("%s %s" |
1111 | + % (line[:line.find(':')], |
1112 | + line[line.rfind('='):])) |
1113 | + print line |
1114 | + |
1115 | + |
1116 | +if __name__ == "__main__": |
1117 | + sys.exit(main()) |
1118 | |
1119 | === added file 'scripts/run_compiz_check.py' |
1120 | --- scripts/run_compiz_check.py 1970-01-01 00:00:00 +0000 |
1121 | +++ scripts/run_compiz_check.py 2009-08-24 14:42:52 +0000 |
1122 | @@ -0,0 +1,20 @@ |
1123 | +#!/usr/bin/python |
1124 | +import os, sys, re |
1125 | +from subprocess import Popen, PIPE |
1126 | + |
1127 | +def main(): |
1128 | + """ |
1129 | + Run compiz check and return any error code |
1130 | + """ |
1131 | + compiz_check = os.path.join(os.path.dirname(__file__), 'compiz-check') |
1132 | + process = Popen(compiz_check, stdout=PIPE) |
1133 | + output = process.communicate()[0] |
1134 | + |
1135 | + # Remove colored output (not handled correctly in checkbox report) |
1136 | + output = re.sub(r'\[([0-8])?(;3[0-7])?(;4[0-7])?m', '', output) |
1137 | + print output |
1138 | + |
1139 | + return process.returncode |
1140 | + |
1141 | +if __name__ == "__main__": |
1142 | + sys.exit(main()) |
1143 | |
1144 | === added file 'scripts/run_disk_bench_test' |
1145 | --- scripts/run_disk_bench_test 1970-01-01 00:00:00 +0000 |
1146 | +++ scripts/run_disk_bench_test 2009-08-24 14:48:22 +0000 |
1147 | @@ -0,0 +1,3 @@ |
1148 | +#!/bin/bash |
1149 | + |
1150 | +gksudo disk_bench_test.py |
1151 | |
1152 | === added file 'scripts/xrandr_cycle.py' |
1153 | --- scripts/xrandr_cycle.py 1970-01-01 00:00:00 +0000 |
1154 | +++ scripts/xrandr_cycle.py 2009-08-24 13:12:46 +0000 |
1155 | @@ -0,0 +1,86 @@ |
1156 | +#!/usr/bin/env python |
1157 | + |
1158 | +import subprocess |
1159 | +import time |
1160 | +import sys |
1161 | + |
1162 | +device_context = '' # track what device's modes we are looking at |
1163 | +modes = [] # keep track of all the devices and modes discovered |
1164 | +current_modes = [] # remember the user's current settings for cleanup later |
1165 | +failures = 0 # count the number of failed modesets |
1166 | +failure_messages = [] # remember which modes failed |
1167 | +success_messages = [] # remember which modes succeeded |
1168 | + |
1169 | +# Run xrandr and ask it what devices and modes are supported |
1170 | +xrandrinfo = subprocess.Popen('xrandr -q', shell=True, stdout=subprocess.PIPE) |
1171 | +output = xrandrinfo.communicate()[0].split('\n') |
1172 | + |
1173 | + |
1174 | +# The results from xrandr are given in terms of the available display devices. |
1175 | +# One device can have zero or more associated modes. Unfortunately xrandr |
1176 | +# indicates this through indentation and is kinda wordy, so we have to keep |
1177 | +# track of the context we see mode names in as we parse the results. |
1178 | + |
1179 | +for line in output: |
1180 | + # I haven't seen any blank lines in xrandr's output in my tests, but meh |
1181 | + if line == '': |
1182 | + break; |
1183 | + |
1184 | + # luckily the various data from xrandr are separated by whitespace... |
1185 | + foo = line.split() |
1186 | + |
1187 | + # Check to see if the second word in the line indicates a new context |
1188 | + # -- if so, keep track of the context of the device we're seeing |
1189 | + if len(foo) >= 2: # throw out any weirdly formatted lines |
1190 | + if foo[1] == 'disconnected': |
1191 | + # we have a new context, but it should be ignored |
1192 | + device_context = '' |
1193 | + if foo[1] == 'connected': |
1194 | + # we have a new context that we want to test |
1195 | + device_context = foo[0] |
1196 | + elif device_context != '': # we've previously seen a 'connected' device |
1197 | + # mode names seem to always be of the format [horiz]x[vert] |
1198 | + # (there can be non-mode information inside of a device context!) |
1199 | + if foo[0].find('x') != -1: |
1200 | + modes.append( (device_context, foo[0]) ) |
1201 | + # we also want to remember what the current mode is, which xrandr |
1202 | + # marks with a '*' character, so we can set things back the way |
1203 | + # we found them at the end: |
1204 | + if foo[1].find('*') != -1: |
1205 | + current_modes.append( (device_context, foo[0]) ) |
1206 | + |
1207 | + |
1208 | +# Now we have a list of the modes we need to test. So let's do just that. |
1209 | + |
1210 | +for mode in modes: |
1211 | + cmd = 'xrandr --output ' + mode[0] + ' --mode ' + mode[1] |
1212 | + retval = subprocess.call(cmd, shell=True) |
1213 | + if retval != 0: |
1214 | + failures = failures + 1 |
1215 | + message = 'Failed to set mode ' + mode[1] + ' for output ' + mode[0] |
1216 | + failure_messages.append(message) |
1217 | + else: |
1218 | + message = 'Set mode ' + mode[1] + ' for output ' + mode[0] |
1219 | + success_messages.append(message) |
1220 | + time.sleep(3) # let the hardware recover a bit |
1221 | + |
1222 | + |
1223 | +# Put things back the way we found them |
1224 | + |
1225 | +for mode in current_modes: |
1226 | + cmd = 'xrandr --output ' + mode[0] + ' --mode ' + mode[1] |
1227 | + subprocess.call(cmd, shell=True) |
1228 | + |
1229 | + |
1230 | +# Output some fun facts and knock off for the day |
1231 | + |
1232 | +for message in failure_messages: |
1233 | + print >> sys.stderr, message |
1234 | + |
1235 | +for message in success_messages: |
1236 | + print message |
1237 | + |
1238 | +if failures != 0: |
1239 | + exit(1) |
1240 | +else: |
1241 | + exit(0) |
1242 | |
1243 | === added file 'tests/audio.txt' |
1244 | --- tests/audio.txt 1970-01-01 00:00:00 +0000 |
1245 | +++ tests/audio.txt 2009-08-24 14:57:07 +0000 |
1246 | @@ -0,0 +1,113 @@ |
1247 | +type: test |
1248 | +plugin: manual |
1249 | +name: list_audio_devices |
1250 | +requires: |
1251 | + alsa.type == 'playback' |
1252 | + package.name == 'alsa-base' |
1253 | +command: cat /proc/asound/cards |
1254 | +description: |
1255 | + Detecting your sound device(s): |
1256 | + . |
1257 | + $output |
1258 | + . |
1259 | + Is this correct? |
1260 | + |
1261 | +type: test |
1262 | +plugin: manual |
1263 | +name: alsa_record_playback_internal |
1264 | +requires: |
1265 | + alsa.type == 'record' |
1266 | + alsa.type == 'playback' |
1267 | + package.name == 'alsa-base' |
1268 | +command: alsa_record_playback |
1269 | +description: |
1270 | + Disconnect any external microphones that you have plugged in. \ |
1271 | + Click the Test button, then speak into your internal microphone. \ |
1272 | + After a few seconds, your speech will be played back to you. |
1273 | + . |
1274 | + Did you hear your speech played back? |
1275 | + |
1276 | +type: test |
1277 | +plugin: manual |
1278 | +name: alsa_record_playback_external |
1279 | +requires: |
1280 | + alsa.type == 'record' |
1281 | + alsa.type == 'playback' |
1282 | + package.name == 'alsa-base' |
1283 | +command: alsa_record_playback |
1284 | +description: |
1285 | + Connect a microphone to your microphone port. \ |
1286 | + Click the Test button, then speak into the microphone. \ |
1287 | + After a few seconds, your speech will be played back to you. |
1288 | + . |
1289 | + Did you hear your speech played back? |
1290 | + |
1291 | +type: test |
1292 | +plugin: manual |
1293 | +name: alsa_record_playback_bluetooth |
1294 | +requires: |
1295 | + alsa.type == 'record' |
1296 | + alsa.type == 'playback' |
1297 | + package.name == 'alsa-base' |
1298 | +command: alsa_record_playback |
1299 | +description: |
1300 | + Pair a Bluetooth headset with your system. Then open the \ |
1301 | + volume control application by right-clicking on the speaker \ |
1302 | + icon in the panel and selecting "Sound Preferences". Select \ |
1303 | + the "Input" tab and choose your Bluetooth device. Select the \ |
1304 | + "Output" tab and choose your Bluetooth device. When you are done, \ |
1305 | + click the Test button, then speak into the microphone. \ |
1306 | + After a few seconds, your speech will be played back to you. |
1307 | + . |
1308 | + Did you hear your speech played back? |
1309 | + |
1310 | +type: test |
1311 | +plugin: automatic |
1312 | +name: audio_detect_silence |
1313 | +requires: |
1314 | + package.name == 'sox' |
1315 | + alsa.type == 'record' |
1316 | + alsa.type == 'playback' |
1317 | +command: audio_detect_silence |
1318 | +description: |
1319 | + Play back a sound on the default output and listen for it on the default \ |
1320 | + input. This makes the most sense when the output and input are directly \ |
1321 | + connected, as with a patch cable. |
1322 | + |
1323 | +type: test |
1324 | +plugin: manual |
1325 | +name: alsa_record_playback_usb |
1326 | +requires: |
1327 | + alsa.type == 'record' |
1328 | + alsa.type == 'playback' |
1329 | + package.name == 'alsa-base' |
1330 | +command: alsa_record_playback |
1331 | +description: |
1332 | + Connect a USB audio device to your system. Then open the \ |
1333 | + volume control application by right-clicking on the speaker \ |
1334 | + icon in the panel and selecting "Sound Preferences". Select \ |
1335 | + the "Input" tab and choose your USB device. Select the \ |
1336 | + "Output" tab and choose your USB device. When you are done, \ |
1337 | + click the Test button, then speak into the microphone. \ |
1338 | + After a few seconds, your speech will be played back to you. |
1339 | + . |
1340 | + Did you hear your speech played back? |
1341 | + |
1342 | +type: test |
1343 | +plugin: manual |
1344 | +name: alsa_record_playback_alternates |
1345 | +requires: |
1346 | + alsa.type == 'record' |
1347 | + alsa.type == 'playback' |
1348 | + package.name == 'alsa-base' |
1349 | +command: alsa_record_playback |
1350 | +description: |
1351 | + Open the volume control application by right-clicking on the speaker \ |
1352 | + icon in the panel and selecting "Sound Preferences". Select \ |
1353 | + the "Input" tab and choose any alternate (non-default) device(s). Select the \ |
1354 | + "Output" tab and choose any alternate (non-default) device(s). When you are \ |
1355 | + done, click the Test button, then speak into the microphone. \ |
1356 | + After a few seconds, your speech will be played back to you. |
1357 | + . |
1358 | + Did you hear your speech played back? |
1359 | + |
1360 | |
1361 | === added file 'tests/disk.txt' |
1362 | --- tests/disk.txt 1970-01-01 00:00:00 +0000 |
1363 | +++ tests/disk.txt 2009-08-24 14:48:22 +0000 |
1364 | @@ -0,0 +1,9 @@ |
1365 | +plugin: manual |
1366 | +name: miscellanea/disk-bench |
1367 | +command: run_disk_bench_test |
1368 | +description: |
1369 | + Disk benchmark: |
1370 | + $output |
1371 | + . |
1372 | + Is this ok? |
1373 | + |
1374 | |
1375 | === added file 'tests/fingerprint.txt' |
1376 | --- tests/fingerprint.txt 1970-01-01 00:00:00 +0000 |
1377 | +++ tests/fingerprint.txt 2009-08-24 14:45:12 +0000 |
1378 | @@ -0,0 +1,31 @@ |
1379 | +plugin: manual |
1380 | +name: fingerprint/login |
1381 | +description: |
1382 | + Prerequisites: This test case assumes that there's a testing account from which test cases are run and a personal account that the tester uses to verify the fingerprint reader |
1383 | + . |
1384 | + Fingerprint unlock verification procedure: |
1385 | + 1.- Click on the user switcher applet |
1386 | + 2.- Select your user name |
1387 | + 3.- A window should appear that provides the ability to login either typing your password or using fingerprint authentication |
1388 | + 4.- Use the fingerprint reader to login |
1389 | + 5.- Click on the user switcher applet |
1390 | + 6.- Select the testing account to continue running tests |
1391 | + . |
1392 | + Did the authentication procedure work correctly? |
1393 | + . |
1394 | + Note: Please add information that might help to add fingerprint detection to oem-services-qa@lists.launchpad.net |
1395 | + |
1396 | +plugin: manual |
1397 | +name: fingerprint/unlock |
1398 | +description: |
1399 | + Fingerprint unlock verification procedure: |
1400 | + 1.- Click on the user switcher applet |
1401 | + 2.- Select 'Lock screen' |
1402 | + 3.- Press any key or move the mouse |
1403 | + 3.- A window should appear that provides the ability to unlock either typing your password or using fingerprint authentication |
1404 | + 4.- Use the fingerprint reader to unlock |
1405 | + 5.- Screen should be unlocked |
1406 | + . |
1407 | + Did the authentication procedure work correctly? |
1408 | + . |
1409 | + Note: Please add information that might help to add fingerprint detection to oem-services-qa@lists.launchpad.net |
1410 | |
1411 | === added file 'tests/firewire.txt' |
1412 | --- tests/firewire.txt 1970-01-01 00:00:00 +0000 |
1413 | +++ tests/firewire.txt 2009-08-24 14:45:12 +0000 |
1414 | @@ -0,0 +1,12 @@ |
1415 | +plugin: manual |
1416 | +name: firewire/hdd |
1417 | +description: |
1418 | + Firewire HDD verification procedure: |
1419 | + 1.- Plug a Firewire HDD into the computer |
1420 | + 2.- A window should be opened asking which action should be performed (open folder, photo manager, etc). |
1421 | + 3.- Copy some files from the internal/firewire HDD to the firewire/internal HDD |
1422 | + . |
1423 | + Do the copy operations work as expected? |
1424 | + . |
1425 | + Note: Please send any information that might help to detect a Firewire controller to oem-services-qa@lists.launchpad.net |
1426 | + |
1427 | |
1428 | === added file 'tests/kms.txt' |
1429 | --- tests/kms.txt 1970-01-01 00:00:00 +0000 |
1430 | +++ tests/kms.txt 2009-08-24 13:12:46 +0000 |
1431 | @@ -0,0 +1,15 @@ |
1432 | +type: test |
1433 | +plugin: manual |
1434 | +name: chvt |
1435 | +requires: |
1436 | + package.name == 'kbd' |
1437 | +command: gksudo cycle_vts |
1438 | +description: |
1439 | + Click Test to switch to another virtual terminal and then back to X. Your \ |
1440 | + screen will change temporarily to a text console and then switch back to your \ |
1441 | + current session. |
1442 | + . |
1443 | + Note that this test may require you to enter your password. |
1444 | + . |
1445 | + Did the screen change temporarily to a text console? |
1446 | + |
1447 | |
1448 | === added file 'tests/media.txt' |
1449 | --- tests/media.txt 1970-01-01 00:00:00 +0000 |
1450 | +++ tests/media.txt 2009-08-24 14:42:52 +0000 |
1451 | @@ -0,0 +1,11 @@ |
1452 | +plugin: manual |
1453 | +name: dvd-playback |
1454 | +command: totem /media/cdrom |
1455 | +requires: |
1456 | + storage.cdrom.dvd == True |
1457 | + package.name == 'totem' |
1458 | +description: |
1459 | + Insert a DVD. Then click Test to play the DVD in Totem. |
1460 | + . |
1461 | + Did the file play? |
1462 | + |
1463 | |
1464 | === added file 'tests/networking.txt' |
1465 | --- tests/networking.txt 1970-01-01 00:00:00 +0000 |
1466 | +++ tests/networking.txt 2009-08-24 14:31:19 +0000 |
1467 | @@ -0,0 +1,17 @@ |
1468 | +name: networking/builtin-modem |
1469 | +command: network_chk.py |
1470 | +description: |
1471 | + Built-in modem network connection procedure: |
1472 | + 1.- Connect the telephone line to the computer |
1473 | + 2.- Right click on the Network Manager applet |
1474 | + 3.- Select 'Edit Connections' |
1475 | + 4.- Select the 'DSL' tab |
1476 | + 5.- Click on add 'Add' button |
1477 | + 6.- Configure the connection parameters properly |
1478 | + 7.- Notify OSD should confirm that the connection has been established |
1479 | + 8.- Select Test to verify that it's possible to establish both http and ftp connections |
1480 | + . |
1481 | + Was the connection correctly established? |
1482 | + . |
1483 | + Note: Built-in modem detection missing for this test case. Please help on improving this by sending any information that might help to oem-services-qa@lists.launchpad.net |
1484 | + |
1485 | |
1486 | === added file 'tests/xorg.txt' |
1487 | --- tests/xorg.txt 1970-01-01 00:00:00 +0000 |
1488 | +++ tests/xorg.txt 2009-08-24 14:42:52 +0000 |
1489 | @@ -0,0 +1,42 @@ |
1490 | +type: test |
1491 | +plugin: manual |
1492 | +name: xrandr_detect_modes |
1493 | +requires: |
1494 | + package.name == 'x11-xserver-utils' |
1495 | +command: xrandr |
1496 | +description: |
1497 | + The following screens and video modes have been detected on your system: |
1498 | + . |
1499 | + $output |
1500 | + . |
1501 | + Is this correct? |
1502 | + |
1503 | +type: test |
1504 | +plugin: manual |
1505 | +name: xrandr_cycle |
1506 | +depends: xrandr_detect_modes |
1507 | +requires: |
1508 | + package.name == 'x11-xserver-utils' |
1509 | +command: xrandr_cycle.py |
1510 | +description: |
1511 | + Click Test to cycle through the detected video modes for your system. |
1512 | + . |
1513 | + Did the screen appear to be working for each mode? |
1514 | + |
1515 | +plugin: shell |
1516 | +name: compiz-check |
1517 | +command: run_compiz_check.py |
1518 | +description: |
1519 | + Check that hardware is able to run compiz. |
1520 | + |
1521 | +plugin: manual |
1522 | +name: miscellanea/external-monitor |
1523 | +description: |
1524 | + Plug video output to an external monitor. Is the image displayed correctly? |
1525 | + . |
1526 | + Please repeat the test for each kind of video output supported (VGA, DVI, DisplayPort and HDMI). |
1527 | + . |
1528 | + For HDMI, please also check that sound is played in the monitor speakers. |
1529 | + . |
1530 | + Note: Please send any information that might help to detect the video outputs supported to oem-services-qa@lists.launchpad.net |
1531 | + |
Added a number of tests