Merge lp:~thad-fisch-deactivatedaccount/ubuntu/vivid/xdg-utils/lp1363540 into lp:ubuntu/vivid/xdg-utils

Proposed by Thaddaeus Tintenfisch
Status: Merged
Approved by: Didier Roche-Tolomelli
Approved revision: 27
Merge reported by: Didier Roche-Tolomelli
Merged at revision: not available
Proposed branch: lp:~thad-fisch-deactivatedaccount/ubuntu/vivid/xdg-utils/lp1363540
Merge into: lp:ubuntu/vivid/xdg-utils
Diff against target: 1217 lines (+1030/-115)
6 files modified
.pc/applied-patches (+1/-0)
.pc/xdg-screensaver-restore-timeout.diff/scripts/xdg-screensaver (+962/-0)
debian/patches/series (+1/-1)
debian/patches/xdg-screensaver-restore-timeout.diff (+50/-0)
debian/patches/xserver-blanking.diff (+0/-68)
scripts/xdg-screensaver (+16/-46)
To merge this branch: bzr merge lp:~thad-fisch-deactivatedaccount/ubuntu/vivid/xdg-utils/lp1363540
Reviewer Review Type Date Requested Status
Didier Roche-Tolomelli Approve
Simon Steinbeiß (community) Approve
Review via email: mp+246820@code.launchpad.net

Description of the change

This merge-request adds a patch which fixes a small issue in the xdg-screensaver resume functionality. Calling xdg-screensaver resume should restore the X11 screensaver timeout properly and not just fall back to the default timeout.

The patch has not been reviewed or applied upstream yet, but it was tested and works fine.

https://bugs.freedesktop.org/show_bug.cgi?id=88210

To post a comment you must log in.
Revision history for this message
Simon Steinbeiß (ochosi) wrote :

I've previously tested the patch, re-tested with this branch and can approve with my Xubuntu Project Lead hat on.

review: Approve
Revision history for this message
Daniel Holbach (dholbach) wrote :

Just pointing out: this request has lp:~ochosi/ubuntu/vivid/xdg-utils/drop_xserver_patch already merged.

Revision history for this message
Didier Roche-Tolomelli (didrocks) wrote :

Thanks for looking at this bug and help to make ubuntu better!
Your patch looks good and makes sense, I'm releasing with the 2 merges (the other one wasn't merged in mainline yet).

Sponsoring now!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file '.pc/applied-patches'
--- .pc/applied-patches 2014-07-16 09:20:59 +0000
+++ .pc/applied-patches 2015-01-17 16:43:41 +0000
@@ -12,3 +12,4 @@
12lp779156-lubuntu.diff12lp779156-lubuntu.diff
13xdg-screensaver-dbus.patch13xdg-screensaver-dbus.patch
14xfce-blanking.diff14xfce-blanking.diff
15xdg-screensaver-restore-timeout.diff
1516
=== added directory '.pc/xdg-screensaver-restore-timeout.diff'
=== added file '.pc/xdg-screensaver-restore-timeout.diff/.timestamp'
=== added directory '.pc/xdg-screensaver-restore-timeout.diff/scripts'
=== added file '.pc/xdg-screensaver-restore-timeout.diff/scripts/xdg-screensaver'
--- .pc/xdg-screensaver-restore-timeout.diff/scripts/xdg-screensaver 1970-01-01 00:00:00 +0000
+++ .pc/xdg-screensaver-restore-timeout.diff/scripts/xdg-screensaver 2015-01-17 16:43:41 +0000
@@ -0,0 +1,962 @@
1#!/bin/sh
2#---------------------------------------------
3# xdg-screensaver
4#
5# Utility script to control screensaver.
6#
7# Refer to the usage() function below for usage.
8#
9# Copyright 2006, Bryce Harrington <bryce@osdl.org>
10#
11# LICENSE:
12#
13# Permission is hereby granted, free of charge, to any person obtaining a
14# copy of this software and associated documentation files (the "Software"),
15# to deal in the Software without restriction, including without limitation
16# the rights to use, copy, modify, merge, publish, distribute, sublicense,
17# and/or sell copies of the Software, and to permit persons to whom the
18# Software is furnished to do so, subject to the following conditions:
19#
20# The above copyright notice and this permission notice shall be included
21# in all copies or substantial portions of the Software.
22#
23# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
27# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
28# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
29# OTHER DEALINGS IN THE SOFTWARE.
30#
31#---------------------------------------------
32
33manualpage()
34{
35cat << _MANUALPAGE
36Name
37
38xdg-screensaver - command line tool for controlling the screensaver
39
40Synopsis
41
42xdg-screensaver suspend WindowID
43
44xdg-screensaver resume WindowID
45
46xdg-screensaver { activate | lock | reset | status }
47
48xdg-screensaver { --help | --manual | --version }
49
50Description
51
52xdg-screensaver provides commands to control the screensaver.
53
54xdg-screensaver is for use inside a desktop session only. It is not recommended
55to use xdg-screensaver as root.
56
57Commands
58
59suspend WindowID
60
61 Suspends the screensaver and monitor power management. WindowID must be the
62 X Window ID of an existing window of the calling application. The window
63 must remain in existance for the duration of the suspension.
64
65 WindowID can be represented as either a decimal number or as a hexadecimal
66 number consisting of the prefix 0x followed by one or more hexadecimal
67 digits.
68
69 The screensaver can be suspended in relation to multiple windows at the
70 same time. In that case screensaver operation is only restored once the
71 screensaver has been resumed in relation to each of the windows
72
73resume WindowID
74 Resume the screensaver and monitor power management after being suspended.
75 WindowID must be the same X Window ID that was passed to a previous call of
76 xdg-screensaver suspend
77activate
78 Turns the screensaver on immediately. This may result in the screen getting
79 locked, depending on existing system policies.
80lock
81 Lock the screen immediately.
82reset
83 Turns the screensaver off immediately. If the screen was locked the user
84 may be asked to authenticate first.
85status
86 Prints enabled to stdout if the screensaver is enabled to turn on after a
87 period of inactivity and prints disabled if the screensaver is not enabled.
88
89Options
90
91--help
92 Show command synopsis.
93--manual
94 Show this manualpage.
95--version
96 Show the xdg-utils version information.
97
98Exit Codes
99
100An exit code of 0 indicates success while a non-zero exit code indicates
101failure. The following failure codes can be returned:
102
1031
104 Error in command line syntax.
1053
106 A required tool could not be found.
1074
108 The action failed.
109
110Examples
111
112xdg-screensaver suspend 0x1c00007
113
114Causes the screensaver to be disabled till xdg-screensaver resume 0x1c00007 is
115called. 0x1c00007 must be the X Window ID of an existing window.
116
117_MANUALPAGE
118}
119
120usage()
121{
122cat << _USAGE
123xdg-screensaver - command line tool for controlling the screensaver
124
125Synopsis
126
127xdg-screensaver suspend WindowID
128
129xdg-screensaver resume WindowID
130
131xdg-screensaver { activate | lock | reset | status }
132
133xdg-screensaver { --help | --manual | --version }
134
135_USAGE
136}
137
138#@xdg-utils-common@
139
140#----------------------------------------------------------------------------
141# Common utility functions included in all XDG wrapper scripts
142#----------------------------------------------------------------------------
143
144DEBUG()
145{
146 [ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && return 0;
147 [ ${XDG_UTILS_DEBUG_LEVEL} -lt $1 ] && return 0;
148 shift
149 echo "$@" >&2
150}
151
152#-------------------------------------------------------------
153# Exit script on successfully completing the desired operation
154
155exit_success()
156{
157 if [ $# -gt 0 ]; then
158 echo "$@"
159 echo
160 fi
161
162 exit 0
163}
164
165
166#-----------------------------------------
167# Exit script on malformed arguments, not enough arguments
168# or missing required option.
169# prints usage information
170
171exit_failure_syntax()
172{
173 if [ $# -gt 0 ]; then
174 echo "xdg-screensaver: $@" >&2
175 echo "Try 'xdg-screensaver --help' for more information." >&2
176 else
177 usage
178 echo "Use 'man xdg-screensaver' or 'xdg-screensaver --manual' for additional info."
179 fi
180
181 exit 1
182}
183
184#-------------------------------------------------------------
185# Exit script on missing file specified on command line
186
187exit_failure_file_missing()
188{
189 if [ $# -gt 0 ]; then
190 echo "xdg-screensaver: $@" >&2
191 fi
192
193 exit 2
194}
195
196#-------------------------------------------------------------
197# Exit script on failure to locate necessary tool applications
198
199exit_failure_operation_impossible()
200{
201 if [ $# -gt 0 ]; then
202 echo "xdg-screensaver: $@" >&2
203 fi
204
205 exit 3
206}
207
208#-------------------------------------------------------------
209# Exit script on failure returned by a tool application
210
211exit_failure_operation_failed()
212{
213 if [ $# -gt 0 ]; then
214 echo "xdg-screensaver: $@" >&2
215 fi
216
217 exit 4
218}
219
220#------------------------------------------------------------
221# Exit script on insufficient permission to read a specified file
222
223exit_failure_file_permission_read()
224{
225 if [ $# -gt 0 ]; then
226 echo "xdg-screensaver: $@" >&2
227 fi
228
229 exit 5
230}
231
232#------------------------------------------------------------
233# Exit script on insufficient permission to write a specified file
234
235exit_failure_file_permission_write()
236{
237 if [ $# -gt 0 ]; then
238 echo "xdg-screensaver: $@" >&2
239 fi
240
241 exit 6
242}
243
244check_input_file()
245{
246 if [ ! -e "$1" ]; then
247 exit_failure_file_missing "file '$1' does not exist"
248 fi
249 if [ ! -r "$1" ]; then
250 exit_failure_file_permission_read "no permission to read file '$1'"
251 fi
252}
253
254check_vendor_prefix()
255{
256 file_label="$2"
257 [ -n "$file_label" ] || file_label="filename"
258 file=`basename "$1"`
259 case "$file" in
260 [a-zA-Z]*-*)
261 return
262 ;;
263 esac
264
265 echo "xdg-screensaver: $file_label '$file' does not have a proper vendor prefix" >&2
266 echo 'A vendor prefix consists of alpha characters ([a-zA-Z]) and is terminated' >&2
267 echo 'with a dash ("-"). An example '"$file_label"' is '"'example-$file'" >&2
268 echo "Use --novendor to override or 'xdg-screensaver --manual' for additional info." >&2
269 exit 1
270}
271
272check_output_file()
273{
274 # if the file exists, check if it is writeable
275 # if it does not exists, check if we are allowed to write on the directory
276 if [ -e "$1" ]; then
277 if [ ! -w "$1" ]; then
278 exit_failure_file_permission_write "no permission to write to file '$1'"
279 fi
280 else
281 DIR=`dirname "$1"`
282 if [ ! -w "$DIR" -o ! -x "$DIR" ]; then
283 exit_failure_file_permission_write "no permission to create file '$1'"
284 fi
285 fi
286}
287
288#----------------------------------------
289# Checks for shared commands, e.g. --help
290
291check_common_commands()
292{
293 while [ $# -gt 0 ] ; do
294 parm="$1"
295 shift
296
297 case "$parm" in
298 --help)
299 usage
300 echo "Use 'man xdg-screensaver' or 'xdg-screensaver --manual' for additional info."
301 exit_success
302 ;;
303
304 --manual)
305 manualpage
306 exit_success
307 ;;
308
309 --version)
310 echo "xdg-screensaver 1.0.2"
311 exit_success
312 ;;
313 esac
314 done
315}
316
317check_common_commands "$@"
318
319[ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && unset XDG_UTILS_DEBUG_LEVEL;
320if [ ${XDG_UTILS_DEBUG_LEVEL-0} -lt 1 ]; then
321 # Be silent
322 xdg_redirect_output=" > /dev/null 2> /dev/null"
323else
324 # All output to stderr
325 xdg_redirect_output=" >&2"
326fi
327
328#--------------------------------------
329# Checks for known desktop environments
330# set variable DE to the desktop environments name, lowercase
331
332detectDE()
333{
334 if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde;
335 elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome;
336 elif `dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/null 2>&1` ; then DE=gnome;
337 elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
338 elif [ x"$DESKTOP_SESSION" = x"LXDE" ]; then DE=lxde;
339 else DE=""
340 fi
341}
342
343#----------------------------------------------------------------------------
344# kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4
345# It also always returns 1 in KDE 3.4 and earlier
346# Simply return 0 in such case
347
348kfmclient_fix_exit_code()
349{
350 version=`kde${KDE_SESSION_VERSION}-config --version 2>/dev/null | grep '^KDE'`
351 major=`echo $version | sed 's/KDE.*: \([0-9]\).*/\1/'`
352 minor=`echo $version | sed 's/KDE.*: [0-9]*\.\([0-9]\).*/\1/'`
353 release=`echo $version | sed 's/KDE.*: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'`
354 test "$major" -gt 3 && return $1
355 test "$minor" -gt 5 && return $1
356 test "$release" -gt 4 && return $1
357 return 0
358}
359
360# Check if we can use "mv -T"
361if mv -T ... ... 2>&1 | grep '\.\.\.' > /dev/null ; then
362 # We can securely move files in /tmp with mv -T
363 DEBUG 1 "mv -T available"
364 MV="mv -T"
365 screensaver_file="/tmp/xdg-screensaver-$USER-"`echo $DISPLAY | sed 's/:/-/g'`
366else
367 # No secure moves available, use home dir
368 DEBUG 1 "mv -T not available"
369 MV="mv"
370 screensaver_file="$HOME/.xdg-screensaver-"`echo $(hostname)-$DISPLAY | sed 's/:/-/g'`
371fi
372lockfile_command=`which lockfile 2> /dev/null`
373
374lockfile()
375{
376 if [ -n "$lockfile_command" ] ; then
377 $lockfile_command -1 -l 10 -s 3 "$screensaver_file".lock
378 else
379 # Poor man's attempt at doing a lockfile
380 # Be careful not to facilitate a symlink attack
381 local try
382 try=0
383 while ! ln -s "$screensaver_file".lock "$screensaver_file".lock 2> /dev/null;
384 do
385 sleep 1
386 try=$(($try+1))
387 if [ $try -eq 3 ] ; then
388 rm -f "$screensaver_file".lock || return # Can't remove lockfile
389 try=0
390 fi
391 done
392 fi
393}
394
395unlockfile()
396{
397 rm -f "$screensaver_file".lock
398}
399
400perform_action()
401{
402 result=1
403
404 if [ "$1" = "resume" ] ; then
405 # Restore DPMS state
406 if [ -f "$screensaver_file.dpms" ]; then
407 rm "$screensaver_file.dpms"
408 # Re-enable DPMS
409 xset +dpms
410 fi
411 fi
412 if [ "$1" = "reset" ] ; then
413 if xset -q | grep 'DPMS is Enabled' > /dev/null 2> /dev/null; then
414 xset dpms force on
415 fi
416 fi
417
418 case "$DE" in
419 kde)
420 if [ x"$KDE_SESSION_VERSION" = x"4" ]; then
421 screensaver_freedesktop "$1"
422 else
423 screensaver_kde "$1"
424 fi
425 ;;
426
427 gnome_screensaver)
428 screensaver_gnome_screensaver "$1"
429 ;;
430
431 xscreensaver)
432 screensaver_xscreensaver "$1"
433 ;;
434
435 xfce)
436 screensaver_xserver "$1"
437 ;;
438
439 '')
440 screensaver_xserver "$1"
441 ;;
442 esac
443
444 if [ "$1" = "suspend" ] ; then
445 # Save DPMS state
446 if xset -q | grep 'DPMS is Enabled' > /dev/null 2> /dev/null; then
447 test "${TMPDIR+set}" = set || TMPDIR=/tmp
448 tmpfile=`mktemp $TMPDIR/tmp.XXXXXXXXXX`
449 $MV "$tmpfile" "$screensaver_file.dpms"
450 # Disable DPMS
451 xset -dpms
452 fi
453 fi
454
455}
456
457cleanup_suspend()
458{
459 lockfile
460 test "${TMPDIR+set}" = set || TMPDIR=/tmp
461 tmpfile=`mktemp $TMPDIR/tmp.XXXXXXXXXX`
462 grep -v "$window_id:$xprop_pid\$" "$screensaver_file" > "$tmpfile" 2> /dev/null
463 $MV "$tmpfile" "$screensaver_file"
464 if [ ! -s "$screensaver_file" ] ; then
465 rm "$screensaver_file"
466 unlockfile
467 # $screensaver_file is empty, do resume
468 perform_action resume
469 else
470 unlockfile
471 fi
472}
473
474do_resume()
475{
476 lockfile # Obtain lockfile
477 # Find the PID of the trackingprocess
478 xprop_pid=`grep "$window_id:" "$screensaver_file" 2> /dev/null | cut -d ':' -f 2`
479 unlockfile # Free lockfile
480 if [ -n "$xprop_pid" ] && ps -p "$xprop_pid" 2> /dev/null | grep xprop > /dev/null; then
481 # Kill the tracking process
482 kill -s TERM $xprop_pid
483 fi
484 cleanup_suspend
485}
486
487XPROP=`which xprop 2> /dev/null`
488
489check_window_id()
490{
491 if [ -z "$XPROP" ]; then
492 DEBUG 3 "xprop not found"
493 return
494 fi
495 DEBUG 2 "Running $XPROP -id $window_id"
496 if $XPROP -id $window_id > /dev/null 2> /dev/null; then
497 DEBUG 3 Window $window_id exists
498 else
499 DEBUG 3 Window $window_id does not exist
500 exit_failure_operation_failed "Window $window_id does not exist"
501 fi
502}
503
504track_window()
505{
506 if [ -z "$XPROP" ]; then
507 # Don't track window if we don't have xprop
508 return
509 fi
510 lockfile
511
512 test "${TMPDIR+set}" = set || TMPDIR=/tmp
513 tmpfile=`mktemp $TMPDIR/tmp.XXXXXXXXXX`
514 # Filter stale entries from the xdg-screensaver status file
515 # Return if $window_id is being tracked already
516 (
517 already_tracked=1
518 IFS_save="$IFS"
519 IFS=":"
520 while read wid pid; do
521 if ps -p "$pid" 2> /dev/null | grep xprop > /dev/null; then
522 echo "$wid:$pid"
523 if [ $wid = $window_id ] ; then
524 already_tracked=0
525 fi
526 fi
527 done
528 IFS="$IFS_save"
529 exit $already_tracked
530 ) < $screensaver_file > $tmpfile
531 already_tracked=$?
532
533 if [ "$already_tracked" -eq "0" ] ; then
534 $MV "$tmpfile" "$screensaver_file"
535 # We are already tracking $window_id, don't do anything
536 unlockfile
537 return
538 fi
539
540 # Start tracking $window_id
541 $XPROP -id $window_id -spy > /dev/null &
542 xprop_pid=$!
543 # Add window_id and xprop_pid to the xdg-screensave status file
544 echo "$window_id:$xprop_pid" >> $tmpfile
545 $MV "$tmpfile" "$screensaver_file"
546 unlockfile
547 # Wait for xprop to edit, it means that the window disappeared
548 wait $xprop_pid
549 # Clean up the administration and resume the screensaver
550 cleanup_suspend
551}
552
553screensaver_freedesktop()
554{
555 case "$1" in
556 suspend)
557 dbus-send --session \
558 --dest=org.freedesktop.ScreenSaver \
559 --type=method_call \
560 --print-reply \
561 --reply-timeout=2000 \
562 /ScreenSaver \
563 org.freedesktop.ScreenSaver.Inhibit \
564 string:$window_id \
565 string:xdg-screensaver \
566 | grep uint32 | cut -d ' ' -f 5 >| "$screensaver_file.cookie" \
567 2> /dev/null
568 result=$?
569 ;;
570
571 resume)
572 if [ -f "$screensaver_file.cookie" ] ; then
573 value=`cat "$screensaver_file.cookie"`
574 dbus-send --session \
575 --dest=org.freedesktop.ScreenSaver \
576 --type=method_call \
577 /ScreenSaver \
578 org.freedesktop.ScreenSaver.UnInhibit \
579 uint32:$value \
580 2> /dev/null
581 rm -f "$screensaver_file.cookie"
582 fi
583 result=$?
584 ;;
585
586 activate)
587 dbus-send --session \
588 --dest=org.freedesktop.ScreenSaver \
589 --type=method_call \
590 /ScreenSaver \
591 org.freedesktop.ScreenSaver.SetActive \
592 boolean:true \
593 2> /dev/null
594 result=$?
595 ;;
596
597 lock)
598 dbus-send --session \
599 --dest=org.freedesktop.ScreenSaver \
600 --type=method_call \
601 /ScreenSaver \
602 org.freedesktop.ScreenSaver.Lock \
603 2> /dev/null
604 ;;
605
606 reset)
607 if [ -f "$screensaver_file.cookie" ] ; then
608 value=`cat "$screensaver_file.cookie"`
609 dbus-send --session \
610 --dest=org.freedesktop.ScreenSaver \
611 --type=method_call \
612 /ScreenSaver \
613 org.freedesktop.ScreenSaver.UnInhibit \
614 uint32:$value \
615 2> /dev/null
616 rm -f "$screensaver_file.cookie"
617 fi
618 result=$?
619 ;;
620
621 status)
622 status=`dbus-send --session \
623 --dest=org.freedesktop.ScreenSaver \
624 --type=method_call \
625 --print-reply \
626 --reply-timeout=2000 \
627 /ScreenSaver \
628 org.freedesktop.ScreenSaver.GetActive \
629 | grep boolean | cut -d ' ' -f 5`
630 result=$?
631 if [ x"$status" = "xtrue" ]; then
632 echo "enabled"
633 elif [ x"$status" = "xfalse" ]; then
634 echo "disabled"
635 else
636 echo "ERROR: dbus org.freedesktop.ScreenSaver.GetActive returned '$status'" >&2
637 return 1
638 fi
639 ;;
640
641 *)
642 echo "ERROR: Unknown command '$1'" >&2
643 return 1
644 ;;
645 esac
646}
647
648screensaver_kde()
649{
650 case "$1" in
651 suspend)
652 dcop kdesktop KScreensaverIface enable false > /dev/null
653 result=$?
654 ;;
655
656 resume)
657 dcop kdesktop KScreensaverIface configure > /dev/null
658 result=$?
659 ;;
660
661 activate)
662 dcop kdesktop KScreensaverIface save > /dev/null
663 result=$?
664 ;;
665
666 lock)
667 dcop kdesktop KScreensaverIface lock > /dev/null
668 result=$?
669 ;;
670
671 reset)
672 # Turns the screensaver off right now
673 dcop kdesktop KScreensaverIface quit > /dev/null
674 result=$?
675 ;;
676
677 status)
678 status=`dcop kdesktop KScreensaverIface isEnabled`
679 result=$?
680 if [ x"$status" = "xtrue" ]; then
681 echo "enabled"
682 elif [ x"$status" = "xfalse" ]; then
683 echo "disabled"
684 else
685 echo "ERROR: kdesktop KScreensaverIface isEnabled returned '$status'" >&2
686 return 1
687 fi
688 ;;
689
690 *)
691 echo "ERROR: Unknown command '$1'" >&2
692 return 1
693 ;;
694 esac
695}
696
697screensaver_xserver()
698{
699 case "$1" in
700 suspend)
701 xset s off > /dev/null
702 result=$?
703 ;;
704
705 resume)
706 xset s default > /dev/null
707 result=$?
708 ;;
709
710 activate)
711 xset s activate > /dev/null
712 result=$?
713 ;;
714
715 reset)
716 xset s reset > /dev/null
717 result=$?
718 ;;
719
720 status)
721 timeout=`xset q | sed '/^Screen Saver:/,/^[^ ]/ { s/.*timeout: *\([0-9]*\).*/\1/; t }; d'`
722 result=$?
723 if [ "$timeout" -gt 0 ]; then
724 echo "enabled"
725 elif [ "$timeout" -eq 0 ]; then
726 echo "disabled"
727 else
728 echo "ERROR: xset q did not report the screensaver timeout" >&2
729 return 1
730 fi
731 ;;
732
733 *)
734 echo "ERROR: Unknown command '$1'" >&2
735 return 1
736 ;;
737 esac
738}
739
740screensaver_suspend_loop()
741{
742 lockfile
743 test "${TMPDIR+set}" = set || TMPDIR=/tmp
744 tmpfile=`mktemp $TMPDIR/tmp.XXXXXXXXXX`
745 # Filter stale entries from the xdg-screensaver status file
746 cat "$screensaver_file" 2> /dev/null | (
747 IFS_save="$IFS"
748 IFS=":"
749 while read wid pid; do
750 if ps -p "$pid" 2> /dev/null | grep xprop > /dev/null; then
751 echo "$wid:$pid"
752 fi
753 done
754 IFS="$IFS_save"
755 ) > $tmpfile
756 if [ -s "$tmpfile" ] ; then
757 # Suspend pending, don't do a thing
758 $MV "$tmpfile" "$screensaver_file"
759 unlockfile
760 return
761 fi
762 $MV "$tmpfile" "$screensaver_file"
763 unlockfile
764 (while [ -f "$screensaver_file" ]; do $*; sleep 50; done) > /dev/null 2> /dev/null &
765}
766
767screensaver_gnome_screensaver()
768{
769# DBUS interface for gnome-screensaver
770# http://people.gnome.org/~mccann/gnome-screensaver/docs/gnome-screensaver.html
771 case "$1" in
772 suspend)
773 screensaver_suspend_loop \
774 dbus-send --session \
775 --dest=org.gnome.ScreenSaver \
776 --type=method_call \
777 /org/gnome/ScreenSaver \
778 org.gnome.ScreenSaver.SimulateUserActivity \
779 2> /dev/null
780 result=$?
781 ;;
782
783 resume)
784 # Automatic resume when $screensaver_file disappears
785 result=0
786 ;;
787
788 activate)
789 dbus-send --session \
790 --dest=org.gnome.ScreenSaver \
791 --type=method_call \
792 /org/gnome/ScreenSaver \
793 org.gnome.ScreenSaver.SetActive \
794 boolean:true \
795 2> /dev/null
796 result=$?
797 ;;
798
799 lock)
800 gnome-screensaver-command --lock > /dev/null 2> /dev/null
801 result=$?
802 ;;
803
804 reset)
805 # Turns the screensaver off right now
806 dbus-send --session \
807 --dest=org.gnome.ScreenSaver \
808 --type=method_call \
809 /org/gnome/ScreenSaver \
810 org.gnome.ScreenSaver.SimulateUserActivity \
811 2> /dev/null
812 result=$?
813 ;;
814
815 status)
816 status=`dbus-send --session \
817 --dest=org.gnome.ScreenSaver \
818 --type=method_call \
819 --print-reply \
820 --reply-timeout=2000 \
821 /org/gnome/ScreenSaver \
822 org.gnome.ScreenSaver.GetActive \
823 | grep boolean | cut -d ' ' -f 5`
824 result=$?
825 if [ x"$status" = "xtrue" -o x"$status" = "xfalse" ]; then
826 echo "enabled"
827 elif [ x"$result" != "x0" ]; then
828 echo "ERROR: dbus org.gnome.ScreenSaver.GetActive returned '$status'" >&2
829 return 1
830 else
831 echo "disabled"
832 fi
833 ;;
834
835 *)
836 echo "ERROR: Unknown command '$1" >&2
837 return 1
838 ;;
839 esac
840}
841
842screensaver_xscreensaver()
843{
844 case "$1" in
845 suspend)
846 screensaver_suspend_loop xscreensaver-command -deactivate
847 result=0
848 ;;
849
850 resume)
851 # Automatic resume when $screensaver_file disappears
852 result=0
853 ;;
854
855 activate)
856 xscreensaver-command -activate > /dev/null 2> /dev/null
857 result=$?
858 ;;
859
860 lock)
861 xscreensaver-command -lock > /dev/null 2> /dev/null
862 result=$?
863 ;;
864
865 reset)
866 # Turns the screensaver off right now
867 xscreensaver-command -deactivate > /dev/null 2> /dev/null
868 result=$?
869 ;;
870
871 status)
872 result=0
873 if [ -f "$screensaver_file" ] ; then
874 echo "disabled"
875 else
876 echo "enabled"
877 fi
878 ;;
879
880 *)
881 echo "ERROR: Unknown command '$1" >&2
882 return 1
883 ;;
884 esac
885}
886
887[ x"$1" != x"" ] || exit_failure_syntax
888
889action=
890window_id=
891
892case $1 in
893 suspend)
894 action="$1"
895
896 shift
897
898 if [ -z "$1" ] ; then
899 exit_failure_syntax "WindowID argument missing"
900 fi
901
902 window_id="$1"
903 check_window_id
904 ;;
905
906 resume)
907 action="$1"
908
909 shift
910
911 if [ -z "$1" ] ; then
912 exit_failure_syntax "WindowID argument missing"
913 fi
914
915 window_id="$1"
916 check_window_id
917 ;;
918
919 activate)
920 action="$1"
921 ;;
922
923 lock)
924 action="$1"
925 ;;
926
927 reset)
928 action="$1"
929 ;;
930
931 status)
932 action="$1"
933 ;;
934
935 *)
936 exit_failure_syntax "unknown command '$1'"
937 ;;
938esac
939
940detectDE
941# Consider "xscreensaver" a separate DE
942xscreensaver-command -version 2> /dev/null | grep XScreenSaver > /dev/null && DE="xscreensaver"
943# Consider "gnome-screensaver" a separate DE
944gnome-screensaver-command -q > /dev/null 2>&1 && DE="gnome_screensaver"
945
946if [ "$action" = "resume" ] ; then
947 do_resume
948 exit_success
949fi
950
951perform_action "$action"
952
953if [ "$action" = "suspend" ] ; then
954 # Start tracking $window_id and resume the screensaver once it disappears
955 ( track_window ) 2> /dev/null > /dev/null &
956fi
957
958if [ $result -eq 0 ]; then
959 exit_success
960else
961 exit_failure_operation_failed
962fi
0963
=== modified file 'debian/patches/series'
--- debian/patches/series 2014-07-16 09:20:59 +0000
+++ debian/patches/series 2015-01-17 16:43:41 +0000
@@ -1,6 +1,5 @@
1xdg-mime-follow-symlinks.diff1xdg-mime-follow-symlinks.diff
2x-www-browser.diff2x-www-browser.diff
3xserver-blanking.diff
4xdg-email-envvar.diff3xdg-email-envvar.diff
5xdg-email-mutt-detect.diff4xdg-email-mutt-detect.diff
6xdg-mime-generic-use-mimetype.diff5xdg-mime-generic-use-mimetype.diff
@@ -12,3 +11,4 @@
12lp779156-lubuntu.diff11lp779156-lubuntu.diff
13xdg-screensaver-dbus.patch12xdg-screensaver-dbus.patch
14xfce-blanking.diff13xfce-blanking.diff
14xdg-screensaver-restore-timeout.diff
1515
=== added file 'debian/patches/xdg-screensaver-restore-timeout.diff'
--- debian/patches/xdg-screensaver-restore-timeout.diff 1970-01-01 00:00:00 +0000
+++ debian/patches/xdg-screensaver-restore-timeout.diff 2015-01-17 16:43:41 +0000
@@ -0,0 +1,50 @@
1Description: Restore previous X11 screensaver timeout (xdg-screensaver)
2Bug: https://bugs.freedesktop.org/show_bug.cgi?id=88210
3Ubuntu-Bug: https://bugs.launchpad.net/ubuntu/+source/xdg-utils/+bug/1363540
4Author: Thaddaeus Tintenfisch <thad.fisch@gmail.com>
5
6Index: xdg-utils/scripts/xdg-screensaver
7===================================================================
8--- xdg-utils.orig/scripts/xdg-screensaver 2015-01-17 15:51:17.548973598 +0100
9+++ xdg-utils/scripts/xdg-screensaver 2015-01-17 15:52:33.633020130 +0100
10@@ -690,16 +690,29 @@
11 esac
12 }
13
14+xset_screensaver_timeout()
15+{
16+ xset q | sed '/^Screen Saver:/,/^[^ ]/ { s/.*timeout: *\([0-9]*\).*/\1/; t }; d'
17+}
18+
19 screensaver_xserver()
20 {
21 case "$1" in
22 suspend)
23- xset s off > /dev/null
24+ timeout=`xset_screensaver_timeout`
25+ if [ "$timeout" -gt 0 ]; then
26+ echo "$timeout" > "$screensaver_file.xset"
27+ xset s off > /dev/null
28+ fi
29 result=$?
30 ;;
31
32 resume)
33- xset s default > /dev/null
34+ if [ -f "$screensaver_file.xset" ] ; then
35+ value=`cat "$screensaver_file.xset"`
36+ xset s $value > /dev/null
37+ rm -f "$screensaver_file.xset"
38+ fi
39 result=$?
40 ;;
41
42@@ -714,7 +727,7 @@
43 ;;
44
45 status)
46- timeout=`xset q | sed '/^Screen Saver:/,/^[^ ]/ { s/.*timeout: *\([0-9]*\).*/\1/; t }; d'`
47+ timeout=`xset_screensaver_timeout`
48 result=$?
49 if [ "$timeout" -gt 0 ]; then
50 echo "enabled"
051
=== removed file 'debian/patches/xserver-blanking.diff'
--- debian/patches/xserver-blanking.diff 2011-02-20 18:34:53 +0000
+++ debian/patches/xserver-blanking.diff 1970-01-01 00:00:00 +0000
@@ -1,68 +0,0 @@
1Description: Support X server blanking in xdg-screensaver.
2Bug: https://bugs.freedesktop.org/show_bug.cgi?id=30561
3Bug-Debian: http://bugs.debian.org/511248
4Author: Ben Hutchings <ben@decadent.org.uk>
5
6--- a/scripts/xdg-screensaver
7+++ b/scripts/xdg-screensaver
8@@ -435,6 +435,10 @@ perform_action()
9 '')
10 screensaver_xserver "$1"
11 ;;
12+
13+ '')
14+ screensaver_xserver "$1"
15+ ;;
16 esac
17
18 if [ "$1" = "suspend" ] ; then
19@@ -682,6 +686,49 @@ screensaver_kde()
20 return 1
21 fi
22 ;;
23+
24+ *)
25+ echo "ERROR: Unknown command '$1'" >&2
26+ return 1
27+ ;;
28+ esac
29+}
30+
31+screensaver_xserver()
32+{
33+ case "$1" in
34+ suspend)
35+ xset s off > /dev/null
36+ result=$?
37+ ;;
38+
39+ resume)
40+ xset s default > /dev/null
41+ result=$?
42+ ;;
43+
44+ activate)
45+ xset s activate > /dev/null
46+ result=$?
47+ ;;
48+
49+ reset)
50+ xset s reset > /dev/null
51+ result=$?
52+ ;;
53+
54+ status)
55+ timeout=`xset q | sed '/^Screen Saver:/,/^[^ ]/ { s/.*timeout: *\([0-9]*\).*/\1/; t }; d'`
56+ result=$?
57+ if [ "$timeout" -gt 0 ]; then
58+ echo "enabled"
59+ elif [ "$timeout" -eq 0 ]; then
60+ echo "disabled"
61+ else
62+ echo "ERROR: xset q did not report the screensaver timeout" >&2
63+ return 1
64+ fi
65+ ;;
66
67 *)
68 echo "ERROR: Unknown command '$1'" >&2
690
=== modified file 'scripts/xdg-screensaver'
--- scripts/xdg-screensaver 2014-07-16 09:20:59 +0000
+++ scripts/xdg-screensaver 2015-01-17 16:43:41 +0000
@@ -694,16 +694,29 @@
694 esac694 esac
695}695}
696696
697xset_screensaver_timeout()
698{
699 xset q | sed '/^Screen Saver:/,/^[^ ]/ { s/.*timeout: *\([0-9]*\).*/\1/; t }; d'
700}
701
697screensaver_xserver()702screensaver_xserver()
698{703{
699 case "$1" in704 case "$1" in
700 suspend)705 suspend)
701 xset s off > /dev/null706 timeout=`xset_screensaver_timeout`
707 if [ "$timeout" -gt 0 ]; then
708 echo "$timeout" > "$screensaver_file.xset"
709 xset s off > /dev/null
710 fi
702 result=$?711 result=$?
703 ;;712 ;;
704713
705 resume)714 resume)
706 xset s default > /dev/null715 if [ -f "$screensaver_file.xset" ] ; then
716 value=`cat "$screensaver_file.xset"`
717 xset s $value > /dev/null
718 rm -f "$screensaver_file.xset"
719 fi
707 result=$?720 result=$?
708 ;;721 ;;
709722
@@ -718,7 +731,7 @@
718 ;;731 ;;
719732
720 status)733 status)
721 timeout=`xset q | sed '/^Screen Saver:/,/^[^ ]/ { s/.*timeout: *\([0-9]*\).*/\1/; t }; d'`734 timeout=`xset_screensaver_timeout`
722 result=$?735 result=$?
723 if [ "$timeout" -gt 0 ]; then736 if [ "$timeout" -gt 0 ]; then
724 echo "enabled"737 echo "enabled"
@@ -737,49 +750,6 @@
737 esac750 esac
738}751}
739752
740screensaver_xserver()
741{
742 case "$1" in
743 suspend)
744 xset s off > /dev/null
745 result=$?
746 ;;
747
748 resume)
749 xset s default > /dev/null
750 result=$?
751 ;;
752
753 activate)
754 xset s activate > /dev/null
755 result=$?
756 ;;
757
758 reset)
759 xset s reset > /dev/null
760 result=$?
761 ;;
762
763 status)
764 timeout=`xset q | sed '/^Screen Saver:/,/^[^ ]/ { s/.*timeout: *\([0-9]*\).*/\1/; t }; d'`
765 result=$?
766 if [ "$timeout" -gt 0 ]; then
767 echo "enabled"
768 elif [ "$timeout" -eq 0 ]; then
769 echo "disabled"
770 else
771 echo "ERROR: xset q did not report the screensaver timeout" >&2
772 return 1
773 fi
774 ;;
775
776 *)
777 echo "ERROR: Unknown command '$1'" >&2
778 return 1
779 ;;
780 esac
781}
782
783screensaver_suspend_loop()753screensaver_suspend_loop()
784{754{
785 lockfile755 lockfile

Subscribers

People subscribed via source and target branches

to all changes: