2019-10-19 19:37:32 +03:00

55 lines
2.5 KiB
Python

# ========================================================================== #
# #
# KVMD - The main Pi-KVM daemon. #
# #
# Copyright (C) 2018 Maxim Devaev <mdevaev@gmail.com> #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
# #
# ========================================================================== #
import sys
import signal
import psutil
# =====
_PROCESS_NAME = "file-storage"
# =====
def _unlock() -> None:
# https://github.com/torvalds/linux/blob/3039fad/drivers/usb/gadget/function/f_mass_storage.c#L2924
found = False
for proc in psutil.process_iter():
attrs = proc.as_dict(attrs=["name", "exe"])
if attrs.get("name") == _PROCESS_NAME and not attrs.get("exe"):
try:
proc.send_signal(signal.SIGUSR1)
found = True
except Exception as err:
raise SystemExit(f"Can't send SIGUSR1 to MSD kernel thread with pid={attrs['pid']}: {err}")
if not found:
raise SystemExit(f"Can't find MSD kernel thread {_PROCESS_NAME!r}")
# =====
def main() -> None:
if len(sys.argv) != 2 or sys.argv[1] != "unlock":
raise SystemExit(f"This program interrupts all IO operations performed by OTG MSD.\n\n"
f"Usage: python -m kvmd.helpers.otgmsd.unlock [-h|--help|unlock]")
_unlock()