SSH会话无法访问USB设备:RaspberryPI 3搭配Canon EOS 350D延时摄影故障
解决SSH登录Raspberry Pi使用gphoto2控制Canon EOS 350D的权限问题
这种本地操作正常、SSH远程就失效的情况,几乎都是USB设备权限或者用户组配置的问题——毕竟本地登录时系统会自动赋予当前用户设备访问权限,但远程SSH会话不会默认继承这个权限。下面是一步步的排查和解决方法:
1. 确认用户组权限
首先,本地登录和SSH登录的用户必须属于能访问USB设备的用户组(通常是plugdev或camera):
- 本地登录时执行:
groups,记下当前用户所属的组(比如默认pi用户会包含plugdev) - SSH登录后同样执行
groups,如果看不到plugdev或camera,执行以下命令添加用户到对应组:
替换sudo usermod -aG plugdev your-usernameyour-username为你的实际用户名(比如默认的pi),然后退出SSH重新登录,再执行groups确认组已添加。
2. 配置udev规则(核心解决步骤)
USB设备的访问权限由udev系统管理,我们需要给Canon EOS 350D添加专属规则,让普通用户能访问它:
- 本地连接相机,执行
lsusb找到相机的设备ID:
你会看到类似这样的行:
这里的Bus 001 Device 003: ID 04a9:30d7 Canon, Inc. EOS 350D04a9是厂商ID,30d7是产品ID,记下来。 - 创建udev规则文件:
sudo nano /etc/udev/rules.d/99-canon-eos350d.rules - 在文件中写入以下内容(替换成你刚才拿到的厂商和产品ID):
SUBSYSTEM=="usb", ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="30d7", GROUP="plugdev", MODE="0664" - 保存退出(nano里按
Ctrl+O回车,再Ctrl+X),然后重新加载udev规则:sudo udevadm control --reload-rules && sudo udevadm trigger - 拔下相机USB线,重新插上,然后SSH登录测试
gphoto2 --auto-detect。
3. 排查环境变量(可选)
极少数情况下,gphoto2可能依赖本地会话的DISPLAY环境变量(虽然它是命令行工具),你可以在SSH会话里试试设置:
export DISPLAY=:0
然后再执行gphoto2命令,看是否有效。
4. 用 verbose 模式定位具体错误
如果上面的方法都不行,执行带详细日志的命令:
gphoto2 --auto-detect -v
看输出里的错误信息,比如是否有Permission denied,这能帮你更精准地定位问题。
内容的提问来源于stack exchange,提问作者Francesco Zaffaroni
相关产品推荐
相关产品推荐

