From f188344fa6f3c5a5fbaefa689f4f9be63e3d6ab9 Mon Sep 17 00:00:00 2001 From: valere Date: Thu, 25 Sep 2025 07:35:52 +0200 Subject: [PATCH] script v0.1 --- README.md | 0 .../android-wifi/android-wifi.desktop | 9 + applications/android-wifi/android-wifi.sh | 66 ++++++++ applications/android-wifi/android-wifi.svg | 16 ++ gamecube-pad/gamecube-pad.sh | 154 ++++++++++++++++++ gamecube-pad/gamecube-pad2.sh | 149 +++++++++++++++++ install.sh | 10 ++ 7 files changed, 404 insertions(+) delete mode 100644 README.md create mode 100644 applications/android-wifi/android-wifi.desktop create mode 100644 applications/android-wifi/android-wifi.sh create mode 100644 applications/android-wifi/android-wifi.svg create mode 100644 gamecube-pad/gamecube-pad.sh create mode 100644 gamecube-pad/gamecube-pad2.sh create mode 100755 install.sh diff --git a/README.md b/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/applications/android-wifi/android-wifi.desktop b/applications/android-wifi/android-wifi.desktop new file mode 100644 index 0000000..3319233 --- /dev/null +++ b/applications/android-wifi/android-wifi.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Android WiFi +Comment=Mirror and control Android devices over Wi-Fi +Exec=/home/valere/.local/bin/android-wifi.sh +Icon=/home/valere/.local/share/icons/android-wifi.svg +Terminal=false +Type=Application +Categories=Utility; +StartupNotify=true diff --git a/applications/android-wifi/android-wifi.sh b/applications/android-wifi/android-wifi.sh new file mode 100644 index 0000000..d04e1df --- /dev/null +++ b/applications/android-wifi/android-wifi.sh @@ -0,0 +1,66 @@ +#!/bin/sh + +LOG=/tmp/android-wifi.log +echo "===== $(date) =====" >> "$LOG" + +# Vérifier adb +if ! command -v adb >/dev/null 2>&1; then + echo "adb non trouvé dans le PATH" >> "$LOG" + exit 1 +fi + +# Vérifier scrcpy +if ! command -v scrcpy >/dev/null 2>&1; then + echo "scrcpy non trouvé dans le PATH" >> "$LOG" + exit 1 +fi + +# Chercher device TCP existant +TCP_DEVICE=$(adb devices | awk '$1 ~ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:5555$/ {print $1}') + +if [ -n "$TCP_DEVICE" ]; then + # Device Wi-Fi déjà actif + echo "Device TCP déjà actif: $TCP_DEVICE" >> "$LOG" + IP="$TCP_DEVICE" +else + # Récupérer un device USB + USB_ID=$(adb devices | awk 'NR>1 && $2=="device" && $1 !~ /:/ {print $1; exit}') + if [ -z "$USB_ID" ]; then + echo "Aucun device USB détecté" >> "$LOG" + exit 1 + fi + echo "Device USB détecté: $USB_ID" >> "$LOG" + + # Récupérer IP via USB + IP=$(adb -s "$USB_ID" shell ip addr show wlan0 2>>"$LOG" | grep 'inet ' | awk '{print $2}' | cut -d/ -f1) + if [ -z "$IP" ]; then + echo "Impossible de récupérer l'IP du téléphone (wlan0 introuvable)" >> "$LOG" + exit 1 + fi + echo "IP détectée: $IP" >> "$LOG" + + # Passer en mode TCP + echo "[+] Passage en mode TCP 5555" >> "$LOG" + adb -s "$USB_ID" tcpip 5555 >> "$LOG" 2>&1 + + # Connexion Wi-Fi + echo "[+] Connexion à $IP:5555" >> "$LOG" + adb connect "$IP:5555" >> "$LOG" 2>&1 + + # Déconnecter USB pour éviter conflit multiple devices + echo "[+] Déconnexion du device USB $USB_ID" >> "$LOG" + adb disconnect "$USB_ID" >> "$LOG" 2>&1 +fi + +# Attendre que le device TCP soit prêt +echo "[+] Attente du device TCP $IP" >> "$LOG" +while ! adb devices | grep -q "$IP.*device"; do + sleep 1 +done +echo "[+] Device TCP prêt" >> "$LOG" + +# Lancer scrcpy +echo "[+] Lancement de scrcpy sur $IP" >> "$LOG" +scrcpy -s "$IP" >> "$LOG" 2>&1 + +echo "[✓] Fin du script" >> "$LOG" diff --git a/applications/android-wifi/android-wifi.svg b/applications/android-wifi/android-wifi.svg new file mode 100644 index 0000000..0ab92c2 --- /dev/null +++ b/applications/android-wifi/android-wifi.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/gamecube-pad/gamecube-pad.sh b/gamecube-pad/gamecube-pad.sh new file mode 100644 index 0000000..337e717 --- /dev/null +++ b/gamecube-pad/gamecube-pad.sh @@ -0,0 +1,154 @@ +#!/bin/bash +set -e + +SERVICE_NAME="gamecube-pad.service" +SERVICE_PATH="/etc/systemd/system/$SERVICE_NAME" +PYTHON_SCRIPT="/home/$USER/.local/bin/gamecube-pad.py" + +install_service() { + echo "[+] Installation des dépendances..." + sudo apt update + sudo apt install -y python3-evdev python3-uinput xdotool wmctrl + + echo "[+] Création du script Python watcher..." + cat > "$PYTHON_SCRIPT" <<'EOF' +#!/usr/bin/env python3 +import evdev +import uinput +import subprocess +import time + +DEVICE_NAMES = ["8BitDo NGC Modkit"] +AXIS_MAP = { + "ABS_X": ("KEY_LEFT", "KEY_RIGHT"), + "ABS_Y": ("KEY_UP", "KEY_DOWN") +} +BUTTON_MAP = { + "304": "KEY_ENTER", + "305": "KEY_ESC", + "311": "KEY_LEFTALT", + "308": "KEY_TAB", + "310": "KEY_LEFTCTRL", + "307": "KEY_LEFTSHIFT", + "314": "KEY_T" +} +THRESHOLD = 100 +DOLPHIN_NAME = "Dolphin" + +events = [ + uinput.KEY_UP, uinput.KEY_DOWN, uinput.KEY_LEFT, uinput.KEY_RIGHT, + uinput.KEY_ENTER, uinput.KEY_ESC, uinput.KEY_LEFTALT, uinput.KEY_TAB, + uinput.KEY_LEFTCTRL, uinput.KEY_LEFTSHIFT, uinput.KEY_T +] +keyboard = uinput.Device(events) + +def find_device(): + devices = [] + for path in evdev.list_devices(): + try: + dev = evdev.InputDevice(path) + devices.append((path, dev.name)) + except Exception: + continue + for path, name in devices: + if any(dn in name for dn in DEVICE_NAMES): + return path + return None + +def handle_device(dev_path): + dev = evdev.InputDevice(dev_path) + abs_center = {axis: dev.absinfo(axis).value for axis in (evdev.ecodes.ABS_X, evdev.ecodes.ABS_Y)} + try: + for event in dev.read_loop(): + if event.type == evdev.ecodes.EV_KEY: + key_code = str(event.code) + if key_code in BUTTON_MAP: + keyboard.emit(getattr(uinput, BUTTON_MAP[key_code]), event.value) + if event.type == evdev.ecodes.EV_ABS: + axis = evdev.ecodes.ABS[event.code] + val = event.value + neg_key, pos_key = AXIS_MAP.get(axis, (None, None)) + if neg_key and pos_key: + keyboard.emit(getattr(uinput, neg_key), int(val < abs_center[event.code]-THRESHOLD)) + keyboard.emit(getattr(uinput, pos_key), int(val > abs_center[event.code]+THRESHOLD)) + except OSError: + dev.close() + raise + +def main(): + connected = False + while True: + dev_path = find_device() + if dev_path and not connected: + print(f"[+] Manette connectée: {dev_path}") + connected = True + try: + subprocess.Popen(["flatpak", "run", "org.DolphinEmu.dolphin-emu"]) # ou juste ["ma_commande"] si pas d'arguments + except Exception as e: + print(f"[!] Impossible de lancer la commande: {e}") + try: + handle_device(dev_path) + except OSError: + print("[-] Manette déconnectée") + connected = False + try: + subprocess.Popen(["flatpak", "kill", "org.DolphinEmu.dolphin-emu"]) # ou juste ["ma_commande"] si pas d'arguments + except Exception as e: + print(f"[!] Impossible de lancer la commande: {e}") + elif not dev_path and connected: + print("[-] Manette déconnectée") + connected = False + time.sleep(1) + +if __name__=="__main__": + main() +EOF + + chmod +x "$PYTHON_SCRIPT" + + echo "[+] Création du service systemd..." + sudo tee "$SERVICE_PATH" > /dev/null < "$PYTHON_SCRIPT" <<'EOF' +#!/usr/bin/env python3 +import evdev +import uinput +import subprocess +import time +import os + +DEVICE_NAMES = ["8BitDo NGC Modkit"] +BUTTON_MAP = { + "304": "KEY_ENTER", + "305": "KEY_ESC", + "311": "KEY_LEFTALT", + "307": "KEY_RIGHT", + "308": "KEY_LEFT", +} + +events = [ + uinput.KEY_LEFT, uinput.KEY_RIGHT, + uinput.KEY_ENTER, uinput.KEY_ESC, uinput.KEY_LEFTALT +] +keyboard = uinput.Device(events) + +def find_device(): + for path in evdev.list_devices(): + try: + dev = evdev.InputDevice(path) + if any(dn in dev.name for dn in DEVICE_NAMES): + return path + except Exception: + continue + return None + +def is_dolphin_running(): + try: + output = subprocess.check_output( + ["flatpak", "ps", "--columns=name"] + ).decode() + return "org.DolphinEmu.dolphin-emu" in output + except Exception: + return False + +def handle_device(dev_path): + dev = evdev.InputDevice(dev_path) + try: + for event in dev.read_loop(): + if event.type == evdev.ecodes.EV_KEY: + key_code = str(event.code) + if key_code in BUTTON_MAP: + keyboard.emit(getattr(uinput, BUTTON_MAP[key_code]), event.value) + except OSError: + dev.close() + raise + +def main(): + connected = False + time.sleep(5) # délai pour que uinput et le serveur graphique soient prêts + while True: + dev_path = find_device() + if dev_path and not connected: + print(f"[+] Manette connectée: {dev_path}") + connected = True + if not is_dolphin_running(): + try: + subprocess.Popen(["flatpak", "run", "org.DolphinEmu.dolphin-emu"]) + except Exception as e: + print(f"[!] Impossible de lancer Dolphin: {e}") + try: + handle_device(dev_path) + except OSError: + print("[-] Manette déconnectée") + connected = False + try: + subprocess.Popen(["flatpak", "kill", "org.DolphinEmu.dolphin-emu"]) + except Exception as e: + print(f"[!] Impossible de tuer Dolphin: {e}") + elif not dev_path and connected: + print("[-] Manette déconnectée") + connected = False + time.sleep(1) + +if __name__ == "__main__": + main() +EOF + + chmod +x "$PYTHON_SCRIPT" + + echo "[+] Création du service systemd utilisateur..." + mkdir -p "$SERVICE_DIR" + cat > "$SERVICE_FILE" <