#iPhone + DroidCam OBS (Flatpak): odłączenie przewodu od iPhone'a powoduje, że nie można przywrócić obrazu z iPhone'a DroidCam OBS bez restartu OBS. Trwała naprawa.

# Przyczyna: reguła udev kończyła usbmuxd po odpięciu telefonu (usbmuxd -x),
# a po wpięciu startował nowy z nowym plikiem gniazda. OBS w sandboxie
# zostawał przy starym i nie widział telefonu bez restartu.

# 1. Reguła udev bez linii "-x" (kopia w /etc ma pierwszeństwo i przeżywa aktualizacje)

sudo cp /lib/udev/rules.d/39-usbmuxd.rules /etc/udev/rules.d/39-usbmuxd.rules
sudo sed -i '/usbmuxd -x/d' /etc/udev/rules.d/39-usbmuxd.rules
sudo udevadm control --reload

# 2. usbmuxd startuje razem z systemem (przed OBS)

sudo mkdir -p /etc/systemd/system/multi-user.target.wants
sudo ln -sf /lib/systemd/system/usbmuxd.service /etc/systemd/system/multi-user.target.wants/usbmuxd.service

# 3. Automatyczny restart demona po awarii

sudo mkdir -p /etc/systemd/system/usbmuxd.service.d
printf '[Service]\nRestart=always\nRestartSec=1\n' | sudo tee /etc/systemd/system/usbmuxd.service.d/restart.conf

# 4. Załaduj i uruchom

sudo systemctl daemon-reload
sudo systemctl start usbmuxd

# 5. Kontrola (po restarcie komputera, przed uruchomieniem OBS)

grep -n "usbmuxd -x" /etc/udev/rules.d/39-usbmuxd.rules   # brak wyniku = OK
systemctl is-active usbmuxd                               # ma być: active

# ===== Użycie =====

# Po zerwaniu kabla: wepnij kabel, w OBS w źródle DroidCam kliknij Refresh
# i wybierz telefon. Restart OBS niepotrzebny.

# ===== Diagnostyka (gdyby znów przestało działać) =====

ls -i /run/usbmuxd
flatpak enter $(flatpak ps --columns=instance,application | awk '/obsproject/{print $1}') ls -i /run/usbmuxd
# Różne numery = OBS trzyma stare gniazdo. Jedyne wyjście: restart OBS (poza streamem).
systemctl status usbmuxd

# ===== Cofnięcie zmian =====

sudo rm /etc/udev/rules.d/39-usbmuxd.rules
sudo rm /etc/systemd/system/multi-user.target.wants/usbmuxd.service
sudo rm -r /etc/systemd/system/usbmuxd.service.d
sudo udevadm control --reload
sudo systemctl daemon-reload