summaryrefslogtreecommitdiff
path: root/app-misc/rogentoslive-tools/files/1.0/x-setup-init.d
blob: 5b94ec94219cfe37990fda73aab5ec58b60e8560 (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
#!/sbin/runscript
# Copyright 2009-2012 Fabio Erculiani - Sabayon Linux
# Distributed under the terms of the GNU General Public License v2

depend() {
    after mtab
    before hostname
    before xdm
}

gpus_same() {
    # $1 and $2: output lines from "lspci"
    local id1 id2 # [xxxx:]xx:xx.x
    local dev1 dev2 # vendor and device: xxxx:xxxx
    id1=$(echo "$1" | awk '/ VGA / { print $1 }')
    id2=$(echo "$2" | awk '/ VGA / { print $1 }')
    if [ -z "$id1" ] || [ -z "$id2" ]; then
        return 1
    fi
    dev1=$(lspci -s "$id1" -n | awk '{ print $3 }')
    dev2=$(lspci -s "$id2" -n | awk '{ print $3 }')
    [ "$dev1" = "$dev2" ]
}

start() {
    . /sbin/rogentos-functions.sh
    local do_redetect
    do_redetect=$(cat /proc/cmdline | grep "gpudetect")

    if sabayon_is_live; then
        ebegin "Configuring GPU Hardware Acceleration and Input devices"
        start-stop-daemon --start --background --pidfile /var/run/x-setup.pid --make-pidfile --exec /usr/sbin/x-setup-configuration
        eend 0
    else
        if [ -e /first_time_run ] || [ ! -e /etc/gpu-detector.conf ] \
          || [ -n "$do_redetect" ] || [ ! -f /etc/X11/xorg.conf ]; then
            ebegin "Configuring GPU Hardware Acceleration and Input devices for the first time"
            # store config file
            lspci | grep ' VGA ' > /etc/gpu-detector.conf
            /usr/sbin/x-setup-configuration
            eend 0
            return
        fi

        local lspci_vga stored_vga
        local infostr_run="Configuring GPU Hardware Acceleration and Input devices"
        local infostr_skip="Skipping GPU Hardware Acceleration and Input devices configuration"
        lspci_vga=$(lspci | grep ' VGA ')
        stored_vga=$(cat /etc/gpu-detector.conf)

        if [ "$lspci_vga" != "$stored_vga" ] ;  then
            # Strings are different, let's do the more "heavy" and accurate comparison.
            if gpus_same "$lspci_vga" "$stored_vga"; then
                # this may happen after vendor changes its name etc. and PCI ID file is updated
                ebegin "${infostr_skip}, only updating GPU information file"
            else
                ebegin "$infostr_run"
                /usr/sbin/x-setup-configuration &> /dev/null
            fi

            echo "$lspci_vga" > /etc/gpu-detector.conf
            eend 0
            return
        fi

        einfo "$infostr_skip"
    fi
}