diff options
Diffstat (limited to 'x-setup.sh')
-rw-r--r-- | x-setup.sh | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/x-setup.sh b/x-setup.sh new file mode 100644 index 0000000..e2f2533 --- /dev/null +++ b/x-setup.sh @@ -0,0 +1,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}" |