summaryrefslogtreecommitdiff
path: root/x-setup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'x-setup.sh')
-rw-r--r--x-setup.sh54
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}"