Repository navigation
Expand file tree
/
Copy pathevdi-loader.sh
More file actions
executable file
·73 lines (65 loc) · 2.06 KB
/
Copy pathevdi-loader.sh
File metadata and controls
executable file
·73 lines (65 loc) · 2.06 KB
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
#!/bin/bash
# ╦╔═╗╔═╗╦╔═╦╔═╔╗╔╦╔═╗╔═╗ ╔═╗╦
# ║╠═╣║ ╠╩╗╠╩╗║║║║╠╣ ║╣ ╠═╣║
# ╚╝╩ ╩╚═╝╩ ╩╩ ╩╝╚╝╩╚ ╚═╝ ╩ ╩╩ JACKKNIFE AI™
#
# EVDI Loader for Immutable Fedora (Silverblue/Aurora/Bazzite)
#
# Problem: DKMS builds evdi but can't install to read-only /lib/modules.
# Solution: Load evdi directly from the DKMS build path.
#
# This script:
# - Skips if evdi is already loaded
# - Auto-builds for new kernels via dkms autoinstall
# - Decompresses .ko.xz if needed
# - Loads from the correct kernel-versioned path
#
# Install to: /usr/local/bin/evdi-loader.sh
# Author: Alexander Casavant / JACKKNIFE AI™
# License: MIT
set -euo pipefail
KERNEL=$(uname -r)
EVDI_VERSION="${EVDI_VERSION:-1.14.11}"
DKMS_BASE="/var/lib/dkms/evdi/${EVDI_VERSION}"
MODULE_PATH="${DKMS_BASE}/${KERNEL}/x86_64/module/evdi.ko"
MODULE_PATH_XZ="${MODULE_PATH}.xz"
log() {
echo "[evdi-loader] $*"
}
# Check if module already loaded
if lsmod | grep -q "^evdi"; then
log "evdi already loaded"
exit 0
fi
# Check if DKMS source exists
if [ ! -d "${DKMS_BASE}" ]; then
log "ERROR: evdi DKMS source not found at ${DKMS_BASE}"
log "Install displaylink package first: rpm-ostree install displaylink"
exit 1
fi
# Check if module exists for current kernel, build if not
if [ ! -f "$MODULE_PATH" ] && [ ! -f "$MODULE_PATH_XZ" ]; then
log "Building evdi for kernel ${KERNEL}..."
if ! dkms autoinstall; then
log "ERROR: dkms autoinstall failed"
exit 1
fi
fi
# Decompress if needed
if [ -f "$MODULE_PATH_XZ" ] && [ ! -f "$MODULE_PATH" ]; then
log "Decompressing evdi module..."
xz -dk "$MODULE_PATH_XZ"
fi
# Load the module
if [ -f "$MODULE_PATH" ]; then
log "Loading evdi from ${MODULE_PATH}..."
if insmod "$MODULE_PATH"; then
log "evdi loaded successfully"
else
log "ERROR: insmod failed"
exit 1
fi
else
log "ERROR: Could not find evdi module at ${MODULE_PATH}"
exit 1
fi