- razer_protocol.py: приоритет openrazer Python API (DKMS+daemon), fallback на raw USB - setup-razer.sh: одна команда для полной настройки Razer на любом дистре - определяет пакетный менеджер (dnf/apt/pacman/zypper) - ставит kernel-devel + dkms + gcc - собирает и устанавливает DKMS-модуль openrazer - загружает razermouse, настраивает автозагрузку - устанавливает openrazer Python библиотеку
125 lines
5.1 KiB
Bash
Executable File
125 lines
5.1 KiB
Bash
Executable File
#!/bin/bash
|
||
# setup-razer.sh — One-command setup for Razer device support in LGCompanion
|
||
# Works on any Linux distro with DKMS support (Fedora, Ubuntu, Arch, etc.)
|
||
set -e
|
||
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m'
|
||
|
||
info() { echo -e "${GREEN}[+]${NC} $*"; }
|
||
warn() { echo -e "${YELLOW}[!]${NC} $*"; }
|
||
error() { echo -e "${RED}[-]${NC} $*"; }
|
||
|
||
# ── Check root ─────────────────────────────────────────────────────
|
||
if [ "$(id -u)" -ne 0 ]; then
|
||
error "Запустите с sudo: sudo ./setup-razer.sh"
|
||
exit 1
|
||
fi
|
||
|
||
# ── Detect package manager ─────────────────────────────────────────
|
||
install_pkg() {
|
||
if command -v dnf &>/dev/null; then
|
||
dnf install -y "$@"
|
||
elif command -v apt-get &>/dev/null; then
|
||
apt-get install -y "$@"
|
||
elif command -v pacman &>/dev/null; then
|
||
pacman -S --noconfirm "$@"
|
||
elif command -v zypper &>/dev/null; then
|
||
zypper install -y "$@"
|
||
else
|
||
error "Неизвестный пакетный менеджер. Установите вручную: $*"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# ── Step 1: Install build dependencies ─────────────────────────────
|
||
info "Установка зависимостей для сборки модуля..."
|
||
|
||
KERNEL_VER=$(uname -r)
|
||
|
||
if command -v dnf &>/dev/null; then
|
||
install_pkg kernel-devel-"$KERNEL_VER" dkms gcc make || true
|
||
# Fallback: matched meta-package
|
||
rpm -q "kernel-devel-$KERNEL_VER" &>/dev/null || install_pkg kernel-devel-matched
|
||
elif command -v apt-get &>/dev/null; then
|
||
apt-get update -qq
|
||
install_pkg "linux-headers-$KERNEL_VER" dkms gcc make
|
||
elif command -v pacman &>/dev/null; then
|
||
install_pkg linux-headers dkms base-devel
|
||
elif command -v zypper &>/dev/null; then
|
||
install_pkg "kernel-devel-$KERNEL_VER" dkms gcc make
|
||
fi
|
||
|
||
# ── Step 2: Install OpenRazer DKMS driver ──────────────────────────
|
||
OPENRAZER_VER="3.10.3"
|
||
DKMS_SRC="/usr/src/openrazer-driver-${OPENRAZER_VER}"
|
||
|
||
if [ ! -d "$DKMS_SRC" ]; then
|
||
info "Загрузка OpenRazer driver ${OPENRAZER_VER}..."
|
||
TMPDIR=$(mktemp -d)
|
||
cd "$TMPDIR"
|
||
curl -sL "https://github.com/openrazer/openrazer/archive/refs/tags/v${OPENRAZER_VER}.tar.gz" | tar xz
|
||
cp -r "openrazer-${OPENRAZER_VER}/driver" "$DKMS_SRC"
|
||
cat > "$DKMS_SRC/dkms.conf" << 'DKMSCONF'
|
||
PACKAGE_NAME="openrazer-driver"
|
||
PACKAGE_VERSION="3.10.3"
|
||
BUILT_MODULE_NAME[0]="razermouse"
|
||
DEST_MODULE_LOCATION[0]="/extra"
|
||
BUILT_MODULE_NAME[1]="razerkbd"
|
||
DEST_MODULE_LOCATION[1]="/extra"
|
||
BUILT_MODULE_NAME[2]="razerkraken"
|
||
DEST_MODULE_LOCATION[2]="/extra"
|
||
BUILT_MODULE_NAME[3]="razeraccessory"
|
||
DEST_MODULE_LOCATION[3]="/extra"
|
||
AUTOINSTALL="yes"
|
||
MAKE="make -C ${kernel_source_dir} M=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build/modules"
|
||
CLEAN="make -C ${kernel_source_dir} M=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build/modules clean"
|
||
DKMSCONF
|
||
cd /
|
||
rm -rf "$TMPDIR"
|
||
info "Исходники установлены в $DKMS_SRC"
|
||
fi
|
||
|
||
info "Сборка DKMS-модуля для ядра ${KERNEL_VER}..."
|
||
dkms remove -m openrazer-driver -v "$OPENRAZER_VER" --all 2>/dev/null || true
|
||
dkms add -m openrazer-driver -v "$OPENRAZER_VER"
|
||
dkms install -m openrazer-driver -v "$OPENRAZER_VER" -k "$KERNEL_VER"
|
||
|
||
# ── Step 3: Load modules ───────────────────────────────────────────
|
||
info "Загрузка модуля razermouse..."
|
||
modprobe razermouse
|
||
modprobe razerkbd 2>/dev/null || true
|
||
modprobe razerkraken 2>/dev/null || true
|
||
modprobe razeraccessory 2>/dev/null || true
|
||
|
||
# Make modules load on boot
|
||
for mod in razermouse razerkbd razerkraken razeraccessory; do
|
||
if ! grep -q "^$mod$" /etc/modules-load.d/*.conf 2>/dev/null; then
|
||
echo "$mod" >> /etc/modules-load.d/openrazer.conf
|
||
fi
|
||
done
|
||
|
||
# ── Step 4: Install udev rules (if not present) ────────────────────
|
||
UDEV_RULE="/lib/udev/rules.d/99-razer.rules"
|
||
if [ ! -f "$UDEV_RULE" ]; then
|
||
info "Установка udev-правил..."
|
||
curl -sL "https://raw.githubusercontent.com/openrazer/openrazer/v${OPENRAZER_VER}/install_files/udev/99-razer.rules" -o "$UDEV_RULE"
|
||
udevadm control --reload-rules
|
||
udevadm trigger
|
||
fi
|
||
|
||
# ── Step 5: Install openrazer Python library ───────────────────────
|
||
info "Установка openrazer Python библиотеки..."
|
||
pip3 install openrazer 2>/dev/null || pip install openrazer 2>/dev/null || warn "Не удалось установить openrazer через pip"
|
||
|
||
info "========================================="
|
||
info "Установка завершена!"
|
||
info ""
|
||
info "Теперь:"
|
||
info " 1. Выполните: systemctl --user enable --now openrazer-daemon"
|
||
info " 2. Переподключите USB-донгл мыши"
|
||
info " 3. Запустите: lgcompanion-gui"
|
||
info "========================================="
|