summaryrefslogtreecommitdiff
path: root/x-setup.sh
blob: e2f2533e8355bec3a514806af8c9f3ddd386e64a (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
#!/bin/bash

if [ ! -d /proc/bus/pci ]; then
	echo "PCI bus not available" >&2
	exit 0
fi

. /sbin/kogaion-functions.sh

REDETECT=$(cat /proc/cmdline | grep "gpudetect")

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" ]
}


if [ -e /first_time_run ] || [ ! -e /etc/gpu-detector.conf ] \
    || [ -n "${REDETECT}" ]; then
    echo "Configuring GPUs and input devices for the first time"
    lspci | grep ' VGA ' > /etc/gpu-detector.conf
    /sbin/gpu-configuration
    exit 0
fi

infostr_run="Configuring GPUs and input devices"
infostr_skip="Skipping GPUs 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
        echo "${infostr_skip}, only updating GPU information file"
    else
        echo "${infostr_run}"
        /sbin/gpu-configuration
    fi
    echo "${lspci_vga}" > /etc/gpu-detector.conf
    exit 0
fi

echo "${infostr_skip}"