Làm cách nào để sửa lỗi vĩnh viễn / dev / vchiq?


21

Tôi đang làm việc để viết một ứng dụng đồ họa sử dụng GPU của Pi và tôi liên tục gặp * failed to open vchiq instancelỗi khi chạy các chương trình của mình. Điều này thường được sửa bởi một sudo chmod 777 /dev/vchiq, nhưng (1) đây là một sửa chữa rất không an toàn, chắc chắn không phù hợp để triển khai cho các thiết bị do người dùng sở hữu và (2) nó được đặt lại sau mỗi lần khởi động lại.

Làm thế nào tôi có thể khắc phục /dev/vchiqvấn đề của mình "đúng cách", liên tục mà không đưa ra các vấn đề bảo mật?

Câu trả lời:


28

Tôi đã có thể giải quyết vấn đề tương tự bằng cách thêm mình vào videonhóm (Tôi không sử dụng người dùng mặc định). Có lẽ điều này có thể giúp đỡ.

Lệnh là:

sudo usermod -a -G video $(whoami)

Bạn sẽ cần phải đăng xuất và đăng nhập lại để thay đổi có hiệu lực.


2
Điều này làm việc cho tôi ( sudo usermod -a -G video $(whoami)), tôi cũng sẽ đề nghị (vì mục đích bảo mật) thêm người dùng chuyên dụng cho bất kỳ quy trình nào sẽ cần quyền truy cập vào máy ảnh và chỉ thêm người dùng đó vào videonhóm.
n8henrie

3
Sau khi khởi động lại, giải pháp vĩnh viễn này hoạt động tốt và tương đối an toàn.
Serge Stroobandt

Yêu cầu khởi động lại ....
Moosa Baloch

2
Điều này làm việc cho tôi quá! Cảm ơn. Khởi động lại là không cần thiết, đăng xuất và đăng nhập lại là đủ.
tuvokki

1
Đây là cách thích hợp, an toàn để làm điều đó. Nếu bạn có một người dùng chuyên dụng cho chức năng này, bạn có thể thêm họ bằng cách thay thế $ (whoami) bằng tên người dùng đó.
IceMage

8

Bạn có thể tạo quy tắc udev để đặt quyền cụ thể trên thiết bị. Là root, bạn có thể:

echo 'SUBSYSTEM == "vchiq", GROUP = "video", MODE = "0660"'> /etc/udev/rules.d/10-vchiq-permissions.rules
usermod -a -G video YourUnprivilegedUser

Điều này không khắc phục vấn đề. Sau khi chạy nó, tôi vẫn nhận được lỗi.
Cerin

Tôi nghi ngờ các quyền được thực hiện theo quy tắc udev cao hơn (do đó về sau đang chạy) sẽ hoàn tác thay đổi này. Trên PC (Debian) của tôi, tệp được cung cấp bởi hệ thống /lib/udev/rules.d/91-permissions.rulesvì vậy tôi sẽ thử viết nó lên một tệp cao hơn (và có thể bao gồm tên cục bộ trong tên để xác định đó là một sửa đổi cục bộ), tức là:echo `SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"\' > /etc/udev/rules.d/92-local-vchiq-permissions.rules
SlySven

Tôi được phép từ chối, những gì có thể sai?
dmigo

Hoạt động hoàn hảo cho tôi. Giải pháp tao nhã nếu usermod không đủ
Axel Advento

5

Bạn có thể đặt SUIDquyền

sudo chmod u+s /dev/vchiq

Cái này làm gì
bốn giờ

1
Khi một tệp thực thi đã được cấp setuidthuộc tính, người dùng bình thường trên hệ thống có quyền thực thi tệp này sẽ nhận được các đặc quyền của người dùng sở hữu tệp (thường là root). Bạn có thể thiết lập điều này trên chương trình của bạn (giả sử nó thuộc sở hữu của root). Theo /dev/vchiqnhóm videotùy chọn khác là đặt setgidvà nhóm trên chương trình của bạn video.
Milliways

1
Điều đó không giúp được gì, mặc dù người dùng www-dataở trong videonhóm, nhưng tôi đã thành công với chmod a+rw /dev/vchiqRaspbian Stretch.
Jan Turoň

0

thêm vào

start_x=1 
gpu_mem=256

để boot/config.txtsau đó chạysudo raspistill -o cam.jpg

Tất nhiên tôi đã thêm đường dẫn cho raspistill. Nó hoạt động với tôi trong Ubuntu.


Tôi không thấy cách này trả lời câu hỏi của OP - bạn có thể mở rộng câu trả lời của mình để giải thích cách hoạt động của nó trên Raspberry Pi không?
SlySven

0

Nếu bạn đang chạy raspistill từ tập lệnh php được truy cập qua trình duyệt thì bạn cần nhập: sudo usermod -a -G video www-data để cung cấp cho Apache các quyền cần thiết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.