File: xhacks

package info (click to toggle)
hibernate 2.0%2B15%2Bg88d54a8-1
  • links: PTS, VCS
  • area: main
  • in suites: buster, jessie, jessie-kfreebsd, stretch, wheezy
  • size: 740 kB
  • ctags: 114
  • sloc: sh: 1,223; makefile: 17
file content (131 lines) | stat: -rw-r--r-- 4,302 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# -*- sh -*-
# vim:ft=sh:ts=8:sw=4:noet

AddConfigHandler XHacksOptions
AddConfigHelp "SwitchToTextMode <boolean>" "If your X driver is unable to resume properly, you can try switching to a text console first by setting this to yes."
AddConfigHelp "SwitchToTextModeOnResume <boolean>" "Use this to, on resume, switch to a text console and back. Some X drivers need this to properly resume."
AddConfigHelp "UseDummyXServer <boolean>" "Some X drivers can be reinitialised by launching a dummy X server after resuming to restore the state of the graphics card. Set this to yes to do so."
AddConfigHelp "DummyXServerConfig <filename>" "When using a dummy X server, use /etc/X11/<filename> as its configuration."

XHacksSuspend() {
    if [ x"$XHACKS_LEAVE_X" = "x1" ] || [ x"$XHACKS_LEAVE_X_ON_RESUME" = "x1" ] ; then
	if command -v fgconsole > /dev/null 2>&1 ; then
	    XHACKS_ORIGINAL_VT=`fgconsole`
	else
	    XHACKS_ORIGINAL_VT=1
	fi
    fi
    if [ x"$XHACKS_LEAVE_X" = "x1" ] ; then
	local dest_vt
	[ -z "$SWSUSPVT" ] && dest_vt=15 || dest_vt="$SWSUSPVT"
	vecho 3 "xhacks: changing console from $XHACKS_ORIGINAL_VT to $dest_vt"
	chvt $dest_vt || return 1
    fi
    return 0
}

XHacksResume() {
    if [ x"$XHACKS_NVIDIA" = "x1" ] ; then
	# Launch a dummy X server to reinitialise the graphics card
	PATH=$PATH:/usr/bin/X11:/usr/X11R6/bin
	if ! command -v X > /dev/null 2>&1 ; then
	    vecho 1 "X not in path. Not starting dummy X server."
	else
	    vecho 2 "Launching dummy X server."
	    unset XAUTHORITY   # Make sure we don't clobber the user's .Xauthority
	    if [ -f /etc/X11/$XHACKS_CONFIG ] ; then
	    	XHACKS_CONFIG="-config $XHACKS_CONFIG"
	    else
		XHACKS_CONFIG=""
	    fi
	    xinit /bin/true -- `command -v X` :9 $XHACKS_CONFIG -auth /dev/null -audit 0 -nolisten tcp > /dev/null 2>&1
	fi
    fi

    if [ -n "$XHACKS_LEAVE_X_ON_RESUME" ] ; then
	vecho 3 "xhacks: changing to text mode"
	local dest_vt
	[ -z "$SWSUSPVT" ] && dest_vt=15 || dest_vt="$SWSUSPVT"
        chvt $dest_vt
    fi

    if [ -n "$XHACKS_ORIGINAL_VT" ] ; then
	vecho 3 "xhacks: changing console back to $XHACKS_ORIGINAL_VT"
	chvt $XHACKS_ORIGINAL_VT
    fi
}

# Hook1's called when using bootsplash and chvt needs to be performed earlier on
XHacksSuspendHook1() {
    if [ x"$USE_BOOTSPLASH" = "x1" ] || [ x"$USE_FBSPLASH" = "x1" ] || \
		[ -n "$SWSUSPVT" ] ; then
	XHACKS_EARLY_SWITCH=1
	XHacksSuspend
    fi
    return 0
}

XHacksResumeHook1() {
    [ -n "$XHACKS_EARLY_SWITCH" ] && XHacksResume
    return 0
}

# Hook2's called when not using bootsplash or redirecting output and chvt can
# wait a while.
XHacksSuspendHook2() {
    [ -z "$XHACKS_EARLY_SWITCH" ] && XHacksSuspend
    return 0
}

XHacksResumeHook2() {
    [ -z "$XHACKS_EARLY_SWITCH" ] && XHacksResume
    return 0
}

XHacksOptions() {
    case $1 in
	leavexbeforesuspend)
	    vecho 0 "The LeaveXBeforeSuspend option is deprecated and may disappear in"
	    vecho 0 "future releases.  Please use SwitchToTextMode instead."
	    BoolIsOn "$1" "$2" && XHACKS_LEAVE_X=1 || return 0
	    # only break from case statement if we need something done
	    ;;
	switchtotextmode)
	    BoolIsOn "$1" "$2" && XHACKS_LEAVE_X=1 || return 0
	    # only break from case statement if we need something done
	    ;;
	switchtotextmodeonresume)
	    BoolIsOn "$1" "$2" && XHACKS_LEAVE_X_ON_RESUME=1 || return 0
	    # only break from case statement if we need something done
	    ;;
	nvidiahack)
	    vecho 0 "The NvidiaHack option is deprecated and may disappear in"
	    vecho 0 "future releases.  Please use UseDummyXServer instead."
	    BoolIsOn "$1" "$2" && XHACKS_NVIDIA=1 || return 0
	    # only break from case statement if we need something done
	    ;;
	usedummyxserver)
	    BoolIsOn "$1" "$2" && XHACKS_NVIDIA=1 || return 0
	    # only break from case statement if we need something done
	    ;;
	dummyxserverconfig)
	    shift
	    XHACKS_CONFIG="$@"
	    ;;
	*)
	    return 1
    esac

    if [ -z "$XHACKS_HOOKED" ] ; then
	AddSuspendHook 11 XHacksSuspendHook1
	AddSuspendHook 95 XHacksSuspendHook2
	AddResumeHook 11 XHacksResumeHook1
	AddResumeHook 85 XHacksResumeHook2
	# The switch back has to occur after modules have been loaded in order
	# to allow for anything X might need (eg, psmouse)
	XHACKS_HOOKED=1
    fi
    return 0
}

# $Id$