summaryrefslogtreecommitdiff
path: root/nonsystemd/openrc-desktop/xdm.initd
blob: 545aea1888febfbe843e44d56cc840e09b1fefc3 (plain)
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
132
#!/usr/bin/openrc-run
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License, v2

depend() {
    need localmount xdm-setup

    # this should start as early as possible
    after bootmisc consolefont modules netmount
    after readahead-list ypbind autofs openvpn gpm lircmd
    after quota keymaps
    before alsasound

    # Start before X
    use elogind dbus xfs
}

setup_dm() {
    local MY_XDM

    MY_XDM=$(echo "${DISPLAYMANAGER}" | tr '[:upper:]' '[:lower:]')

    NAME=
    case "${MY_XDM}" in
        entrance*)
            EXE=/usr/bin/entrance
            PIDFILE=/run/entrance.pid
            ;;
        gdm|gnome)
            EXE=/usr/bin/gdm
            PIDFILE=/run/gdm/gdm.pid
            START_STOP_ARGS="--background"
            AUTOCLEAN_CGROUP="yes"
            ;;
        wdm)
            EXE=/usr/bin/wdm
            PIDFILE=
            ;;
        gpe)
            EXE=/usr/bin/gpe-dm
            PIDFILE=/run/gpe-dm.pid
            ;;
        lxdm)
            EXE=/usr/bin/lxdm-binary
            PIDFILE=/run/lxdm.pid
            START_STOP_ARGS="--background"
            ;;
        lightdm)
            EXE=/usr/bin/lightdm
            PIDFILE=/run/lightdm.pid
            START_STOP_ARGS="--background"
            ;;
        sddm)
            EXE="/usr/bin/sddm"
            START_STOP_ARGS="-m --background"
            PIDFILE=/run/sddm.pid
            ;;
        *)
            # first find out if there is such executable
            EXE="$(command -v ${MY_XDM} 2>/dev/null)"
            PIDFILE="/run/${MY_XDM}.pid"

            # warn user that he is doing sick things if the exe was not found
            if [ -z "${EXE}" ]; then
                echo "ERROR: Your XDM value is invalid."
                echo "  No ${MY_XDM} executable could be found on your system."
            fi
            ;;
    esac

    if ! [ -x "${EXE}" ]; then
        EXE=/usr/bin/xdm
        PIDFILE=/run/xdm.pid
        if ! [ -x "/usr/bin/xdm" ]; then
            echo "ERROR: Please set your DISPLAYMANAGER variable in /etc/conf.d/xdm,"
            echo "	or install x11-apps/xdm package"
            eend 255
        fi
    fi
}

start() {
    local EXE NAME PIDFILE AUTOCLEAN_CGROUP
    setup_dm

    if [ -f /etc/.noxdm ]; then
        einfo "Skipping ${EXE##*/}, /etc/.noxdm found or \"nox\" bootparam passed."
        rm /etc/.noxdm
        return 0
    fi

    ebegin "Setting up ${EXE##*/}"

    # save the prefered DM
    save_options "service" "${EXE}"
    save_options "name"    "${NAME}"
    save_options "pidfile" "${PIDFILE}"
    save_options "start_stop_args" "${START_STOP_ARGS}"
    save_options "autoclean_cgroup" "${AUTOCLEAN_CGROUP:-no}"

    /etc/X11/startDM.sh
    eend 0
}

stop() {
    local retval

    retval=0

    local myexe myname mypidfile myservice
    myexe=$(get_options "service")
    myname=$(get_options "name")
    mypidfile=$(get_options "pidfile")
    myservice=${myexe##*/}
    yesno "${rc_cgroup_cleanup:-no}" || rc_cgroup_cleanup=$(get_options "autoclean_cgroup")

    [ -z "${myexe}" ] && return 0

    ebegin "Stopping ${myservice}"

    if start-stop-daemon --quiet --test --stop --exec "${myexe}"; then
        start-stop-daemon --stop --exec "${myexe}" --retry TERM/5/TERM/5 \
            ${mypidfile:+--pidfile} ${mypidfile} \
            ${myname:+--name} ${myname}
        retval=${?}
    fi

    eend ${retval} "Error stopping ${myservice}"
    return ${retval}
}

# vim: set ts=4 :