You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy应用如何通过SU以超级用户权限运行函数或整个应用

解决Kivy应用以root权限执行ARP扫描的问题

修正subprocess调用的核心问题

你之前的代码存在两个关键错误:

  • su -c 仅接受单个字符串形式的命令,拆分的参数会被su错误解析
  • 直接传函数名name_function无效,子进程的Python环境和主进程不共享函数,必须传递可执行的代码字符串

修正后的代码示例(假设用scapy实现ARP扫描):

import subprocess

# 把ARP扫描的完整逻辑写成可执行的Python代码字符串
arp_scan_code = """
import scapy.all as scapy
arp_request = scapy.ARP(pdst="192.168.1.0/24")
broadcast = scapy.Ether(dst="ff:ff:ff:ff:ff:ff")
arp_request_broadcast = broadcast / arp_request
answered_list = scapy.srp(arp_request_broadcast, timeout=1, verbose=False)[0]

results = []
for element in answered_list:
    client_dict = {"ip": element[1].psrc, "mac": element[1].hwsrc}
    results.append(client_dict)
print(results)
"""

# 正确构造su命令:将整个python调用打包成单个字符串传给su -c
try:
    # 使用shell=True让系统解析完整命令串,同时捕获错误输出
    output = subprocess.check_output(
        ['su', '-c', f'python -c "{arp_scan_code}"'],
        shell=True,
        stderr=subprocess.STDOUT,
        text=True
    )
    print("扫描结果:", output)
except subprocess.CalledProcessError as e:
    print("执行失败,错误信息:", e.output)

适配不同系统的权限方式

Linux桌面环境

直接用su会在终端要求输入密码,但Kivy是GUI应用无法捕获终端输入,建议用系统自带的GUI权限验证工具:

  • 替换su -c为pkexec(跨桌面通用):
    cmd = ['pkexec', 'python', '-c', arp_scan_code]
    
    执行时会弹出系统原生的权限验证窗口,用户输入密码即可执行。

Android系统

  1. 确保设备已Root,且su路径正确(通常为/system/bin/su或/system/xbin/su)
  2. 调整命令指定su完整路径:
    cmd = ['/system/bin/su', '-c', f'python -c "{arp_scan_code}"']
    
  3. 注意:Android的Python环境可能缺少依赖,需提前打包scapy等库到APK中。

其他可选方案

  • 全局提权运行应用:直接在终端用sudo python main.py启动Kivy应用,或修改桌面快捷方式的命令为sudo python /path/to/your/app.py(注意:GUI应用以root运行存在安全风险)
  • 使用setcap给Python程序加权限:如果仅需要ARP扫描权限,可给Python二进制文件添加网络权限:
    sudo setcap cap_net_raw,cap_net_admin+ep /usr/bin/python3
    
    这样无需root即可执行ARP扫描,但仅适用于Linux系统。

调试技巧

  1. 先在终端手动执行命令,验证是否可行,比如:
    su -c "python -c 'import scapy; print(\"scapy可用\")'"
    
  2. 捕获subprocess的错误输出,定位具体问题(比如权限被拒、依赖缺失、命令路径错误)

内容的提问来源于stack exchange,提问作者ȶɦɛֆɦɨռʏɛռɖ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:52:44