我想创建一个应该作为auto运行的程序。当我插入一个pendrive时,它将在终端执行。
如何用C编程?
答案 0 :(得分:4)
如果我说得对,你的意思是Windows {AUTORUN.INF
,不是吗?
在这种情况下,我猜你不太可能找到你想要的东西。它经常被认为是危险的,因为你可以运行你想要的任何东西,包括病毒和其他恶意软件!
答案 1 :(得分:3)
当您插入USB(或通常是许多其他类型的可移动)存储设备时,内核在识别出它之后会通知一个名为udevd的程序。 udevd查看一些规则(存储在/etc/udev/rules.d/,/lib/udev/rules.d/或/dev/.udev/rules.d下的文件中),以查找与新设备匹配的规则并执行做的那些。可移动块设备的规则之一运行程序将文件系统挂载到该驱动器上(可能创建挂载点/目录)。
Gnome,KDE或类似的桌面界面通过D-BUS通知已安装和安装新设备(我不是100%关于此处的确切步骤)。
无论如何,为了在新插入的驱动器上运行程序,您将需要一些程序来为您运行已经运行的程序。您可以尝试更改您的udev规则或安装新驱动器的脚本来为您执行此操作,或者编写一个新的守护程序,以获得通知gnome或KDE等桌面管理系统通知其运行方式的通知,但是没有任何设施可以知道是否已经这样做了。这样做会带来安全风险,因为它允许任何能够访问USB(或类似)插件的人在计算机上运行任何程序。我可以走到有人在咖啡馆里使用笔记本电脑,很快就在他们未经他们同意的情况下在他们的电脑上运行程序。或者,如果我给某人一个USB驱动器并说“这上面有我的度假照片”并且他们将它放在他们的Linux计算机上,那么驱动器上的恶意自动运行程序将在未经他们同意的情况下运行。
如果这些功能已经是某些Linux发行版的一部分(可能是,我不知道),它肯定要求用户在运行之前达成一致,但即便如此,它也必须限于运行用户的UID和GID(忽略了更复杂的SELinux安全性的可能性),以及一个对该用户来说安全的工作目录。这完全忽略了移动文件系统的所有权混淆和SUID位的问题。
这可能不是解决你想要解决的任何问题的正确方法。
答案 2 :(得分:2)
daemons怎么办?
您可以创建一个来检测pendrive插入并在终端中执行您想要的内容。
答案 3 :(得分:0)
您可以在tail / var / log / messages中查找插入消息。它们会因设备而异,但通常看起来有点像这样:
[183532.373402] sda: sda1
[196936.098729] usb 1-3: USB disconnect, address 3
[196936.440424] usb 1-3: new high speed USB device using ehci_hcd and address 6
[196936.586043] usb 1-3: New USB device found, idVendor=0781, idProduct=9219
[196936.586052] usb 1-3: New USB device strings: Mfr=3, Product=4, SerialNumber=5
[196936.586057] usb 1-3: Product: ImageMate CF Reader/Writer
[196936.586061] usb 1-3: Manufacturer: SanDisk
[196936.586065] usb 1-3: SerialNumber: 0302855445
[196936.586286] usb 1-3: configuration #1 chosen from 1 choice
[196936.592552] scsi1 : SCSI emulation for USB Mass Storage devices
[196936.593074] usb-storage: device found at 6
[196936.593078] usb-storage: waiting for device to settle before scanning
[196941.592515] usb-storage: device scan complete
其余的只是一个人。
答案 4 :(得分:0)
我认为KDE会在插件设备的根目录中查找autorun.sh
,但我不确定。