summaryrefslogtreecommitdiff
path: root/raveos-center/raveos_center/driverek.py
diff options
context:
space:
mode:
authorNippy <nippy@Nippy-Mac-mini.local>2026-11-01 18:13:54 +0100
committerNippy <nippy@Nippy-Mac-mini.local>2026-11-01 18:13:54 +0100
commita64ef966534f8dba6af889ba4bfce15691bfc85b (patch)
treeb30f284d05b80fa115569ab220deae13797fad6f /raveos-center/raveos_center/driverek.py
parent919f977b40016f588b0c8532c8a57f6035056b95 (diff)
downloadRaveOS-PKGBUILD-a64ef966534f8dba6af889ba4bfce15691bfc85b.tar.gz
RaveOS-PKGBUILD-a64ef966534f8dba6af889ba4bfce15691bfc85b.zip
új telepítő
Diffstat (limited to 'raveos-center/raveos_center/driverek.py')
-rw-r--r--raveos-center/raveos_center/driverek.py179
1 files changed, 179 insertions, 0 deletions
diff --git a/raveos-center/raveos_center/driverek.py b/raveos-center/raveos_center/driverek.py
new file mode 100644
index 0000000..6ef7842
--- /dev/null
+++ b/raveos-center/raveos_center/driverek.py
@@ -0,0 +1,179 @@
+import re
+import subprocess
+from pathlib import Path
+
+SZKRIPT_HELYEK = [
+ Path("/usr/lib/raveos-center/raveos-gpu-drivers"),
+ Path(__file__).resolve().parent.parent / "driverek" / "raveos-gpu-drivers",
+]
+
+KATEGORIAK = [
+ ("gpu", "Videokártya"),
+ ("wifi", "Wi-Fi"),
+ ("halozat", "Vezetékes hálózat"),
+ ("hang", "Hang"),
+ ("bemenet", "Kontrollerek"),
+]
+
+OSZTALYOK = {
+ "0300": "gpu",
+ "0302": "gpu",
+ "0380": "gpu",
+ "0280": "wifi",
+ "0200": "halozat",
+ "0401": "hang",
+ "0403": "hang",
+}
+
+KONTROLLEREK = {
+ "045e": "Microsoft (Xbox)",
+ "054c": "Sony (PlayStation)",
+ "057e": "Nintendo",
+ "28de": "Valve (Steam)",
+ "2dc8": "8BitDo",
+ "0e6f": "PDP",
+ "24c6": "PowerA",
+ "046d": "Logitech",
+}
+
+XBOX_ADAPTEREK = {"02e6", "02fe", "091e"}
+
+
+def _ki(parancs, ido=30):
+ try:
+ return subprocess.run(parancs, capture_output=True, text=True, timeout=ido).stdout
+ except (OSError, subprocess.TimeoutExpired):
+ return ""
+
+
+def szkript():
+ for hely in SZKRIPT_HELYEK:
+ if hely.is_file():
+ return hely
+ return None
+
+
+def _telepitett():
+ return set(_ki(["pacman", "-Qq"]).split())
+
+
+def _gpu_terv():
+ hely = szkript()
+ if not hely:
+ return {}
+ terv = {}
+ for sor in _ki(["bash", str(hely), "--terv"]).splitlines():
+ if "=" in sor:
+ k, _, v = sor.partition("=")
+ terv[k] = v
+ return terv
+
+
+def _azonosito(szoveg):
+ talalat = re.search(r"\[([0-9a-f]{4})\]$", szoveg.strip())
+ return talalat.group(1) if talalat else ""
+
+
+def _nev(szoveg):
+ return re.sub(r"\s*\[[0-9a-f]{4}\]$", "", szoveg.strip())
+
+
+def _pci_eszkozok():
+ blokkok = _ki(["lspci", "-vmmnnk"]).strip().split("\n\n")
+ eszkozok = []
+ for blokk in blokkok:
+ mezok = {}
+ for sor in blokk.splitlines():
+ if ":\t" in sor:
+ k, _, v = sor.partition(":\t")
+ mezok.setdefault(k, v)
+ osztaly = _azonosito(mezok.get("Class", ""))
+ kategoria = OSZTALYOK.get(osztaly)
+ if not kategoria:
+ continue
+ gyarto = _nev(mezok.get("Vendor", ""))
+ eszkoz = _nev(mezok.get("Device", ""))
+ rovid = re.search(r"\[([^\]]+)\]", eszkoz)
+ eszkozok.append(
+ {
+ "kategoria": kategoria,
+ "nev": f"{gyarto.replace(' Corporation', '').replace(', Inc.', '')} {rovid.group(1) if rovid else eszkoz}".strip(),
+ "gyarto_id": _azonosito(mezok.get("Vendor", "")),
+ "jelenlegi": mezok.get("Driver", ""),
+ }
+ )
+ return eszkozok
+
+
+def _usb_kontrollerek():
+ lista = []
+ for sor in _ki(["lsusb"]).splitlines():
+ talalat = re.search(r"ID ([0-9a-f]{4}):([0-9a-f]{4})\s*(.*)", sor)
+ if not talalat:
+ continue
+ gyarto, termek, nev = talalat.groups()
+ if gyarto not in KONTROLLEREK:
+ continue
+ if not re.search(r"(?i)controller|gamepad|joystick|wireless adapter|xbox|dualsense|dualshock|pro controller|8bitdo", nev):
+ continue
+ lista.append({"gyarto": gyarto, "termek": termek, "nev": nev or KONTROLLEREK[gyarto]})
+ return lista
+
+
+def allapot():
+ telepitett = _telepitett()
+ terv = _gpu_terv()
+ kozos = terv.get("kozos", "").split()
+ gyartoi = {
+ "8086": terv.get("intel_csomagok", "").split(),
+ "1002": terv.get("amd_csomagok", "").split(),
+ "10de": terv.get("nvidia_csomagok", "").split(),
+ }
+ lista = []
+ for e in _pci_eszkozok():
+ elem = dict(e, ajanlott=[], megjegyzes="", gpu=False)
+ if e["kategoria"] == "gpu":
+ elem["gpu"] = True
+ elem["ajanlott"] = kozos + gyartoi.get(e["gyarto_id"], [])
+ if terv.get("virtualis") == "1" and e["gyarto_id"] in ("1af4", "1234", "15ad", "1b36", "80ee"):
+ elem["megjegyzes"] = "Virtuális gépben fut, a 3D gyorsítást a gazdagép adja."
+ elif e["gyarto_id"] == "10de":
+ csalad = terv.get("nvidia_csalad", "")
+ elem["megjegyzes"] = {
+ "open": "NVIDIA, Turing vagy újabb: nyílt forrású NVIDIA kernelmodul.",
+ "580xx": "NVIDIA, Maxwell, Pascal vagy Volta: 580-as hosszú támogatású driver.",
+ "470xx": "NVIDIA, Kepler: 470-es örökölt driver, már nem kap frissítést.",
+ "nem_tamogatott": "Ehhez a régi NVIDIA kártyához nincs zárt driver, a nyílt nouveau marad.",
+ }.get(csalad, "")
+ elif e["kategoria"] == "wifi" and e["gyarto_id"] == "14e4" and not e["jelenlegi"]:
+ elem["ajanlott"] = ["broadcom-wl-dkms"] + (terv.get("fejlecek", "").split() or ["linux-cachyos-headers"])
+ elem["megjegyzes"] = "Broadcom Wi-Fi: a zárt wl driver szükséges hozzá."
+ elif e["kategoria"] == "hang" and "sof" in e["jelenlegi"]:
+ elem["ajanlott"] = ["sof-firmware"]
+ elem["megjegyzes"] = "Intel Sound Open Firmware hangkártya."
+ elif not e["jelenlegi"]:
+ elem["ajanlott"] = ["linux-firmware"]
+ elem["megjegyzes"] = "Nincs betöltött driver, a firmware-csomag hiányozhat."
+ elem["hianyzik"] = [p for p in elem["ajanlott"] if p not in telepitett]
+ lista.append(elem)
+ for k in _usb_kontrollerek():
+ elem = {
+ "kategoria": "bemenet",
+ "nev": k["nev"],
+ "jelenlegi": "kernel (beépített)",
+ "ajanlott": [],
+ "megjegyzes": "",
+ "gpu": False,
+ }
+ if k["gyarto"] == "045e" and k["termek"] in XBOX_ADAPTEREK:
+ elem["ajanlott"] = ["xone-dkms"] + (terv.get("fejlecek", "").split() or ["linux-cachyos-headers"])
+ elem["jelenlegi"] = ""
+ elem["megjegyzes"] = "Xbox vezeték nélküli adapter: az xone driver kell hozzá."
+ elem["hianyzik"] = [p for p in elem["ajanlott"] if p not in telepitett]
+ lista.append(elem)
+ return lista
+
+
+def ujrainditas_kell(elem):
+ return elem["gpu"] and any(p.startswith(("nvidia", "lib32-nvidia")) for p in elem["hianyzik"])
+