我想禁用运行 Ubuntu 13.10 的笔记本电脑的内置网络摄像头?如建议这里,我已经通过将相关内核模块列入黑名单来禁用它们。但重启后模块仍然被加载。我该怎么做才能摆脱这些模块?
我的模块黑名单位于/etc/modprobe.d/blacklist-webcam.conf
并且看起来像这样:
blacklist videodev
blacklist videobuf2_core
blacklist videobuf2_memops
blacklist videobuf2_vmalloc
blacklist uvcvideo
但lsmod
给我(重启后):
Module Size Used by
uvcvideo 80885 0
videobuf2_vmalloc 13216 1 uvcvideo
videobuf2_memops 13362 1 videobuf2_vmalloc
videobuf2_core 40499 1 uvcvideo
videodev 133509 2 uvcvideo,videobuf2_core
编辑:
当我执行时,sudo modprobe -r uvcvideo
模块就消失了。所以我可以编写一个脚本来执行此操作。但我不认为这是一个干净的解决方案 ;-)
答案1
- 在您的 blacklist.conf 中更改
blacklist videodev
为install videodev /bin/false
update-initramfs -u
reboot
有关详细信息,请参阅Arch Wiki 上的内核模块黑名单:
黑名单
在内核模块的上下文中,黑名单是一种阻止加载内核模块的机制。例如,如果不需要相关硬件,或者加载该模块会导致问题,那么这可能很有用:例如,可能有两个内核模块试图控制同一块硬件,将它们一起加载会导致冲突。
一些模块作为 initramfs 的一部分加载。
mkinitcpio -M
将打印出所有自动检测到的模块:为了防止 initramfs 加载其中一些模块,请在 /etc/modprobe.d/modprobe.conf 中将它们列入黑名单。运行mkinitcpio -v
将列出由各种钩子(例如文件系统钩子、块钩子等)拉入的所有模块。请记住将该 .conf 文件添加到 /etc/mkinitcpio.conf 中的 FILES 部分(如果您尚未这样做),并在将模块列入黑名单后重建 initramfs,然后重新启动。使用 /etc/modprobe.d/ 中的文件
在 /etc/modprobe.d/ 中创建一个 .conf 文件,并使用 blacklist 关键字为每个要列入黑名单的模块添加一行。例如,如果您想阻止 pcspkr 模块加载:
/etc/modprobe.d/nobeep.conf # Do not load the 'pcspkr' module on boot. blacklist pcspkr
注意:blacklist 命令会将一个模块列入黑名单,这样它就不会被自动加载,但如果另一个未列入黑名单的模块依赖于它或者手动加载该模块,则可能会加载该模块。
但是,这种行为有一个解决方法;install 命令指示 modprobe 运行自定义命令,而不是像平常一样将模块插入内核,因此您可以强制模块始终加载失败:
/etc/modprobe.d/blacklist.conf ... install module_name /bin/false ...
这将有效地将该模块以及任何依赖该模块的其他模块列入黑名单。
答案2
只需将模块列表放入 /etc/modprobe.d/blacklist.uvcdrver.conf 即可。文件名可以是任何名称。只需确保格式和权限正确即可。
答案3
非常感谢大家的帮助!我在尝试时找到了问题的根源贝恩解决方案modprobe uvcvideo
。他的解决方案很有效。重启后模块确实消失了。但有一个缺点:如果我想重新启用网络摄像头,我无法通过加载模块。
在深入研究我的系统以找出uvcvideo
加载模块的原因时,我终于做了一个grep -r uvcvideo /etc/
,瞧,我找到了一个脚本,当电源线插入时/etc/pm/power.d
,它会执行一个操作modprobe uvcvideo
。我前段时间写了这个脚本来优化功耗。我注释掉了处理网络摄像头模块的行,之后黑名单就起作用了!
答案4
如果你想要在一个命令行指令中找到解决方案,那么这可能会有所帮助(基于这个答案):
要禁用相机直至重新启动,请使用以下命令:
sudo modprobe -r uvcvideo
输入您的密码,如果终端中没有显示任何错误,则您的网络摄像头应该已被禁用。如果您收到错误消息:modprobe:FATAL:Module uvcvideo 正在使用中,您可以尝试使用以下命令强制将其删除:
sudo rmmod -f uvcvideo
要重新启用网络摄像头,请在 shell 中输入:
sudo modprobe uvcvideo