ฉันจะแก้ไขข้อผิดพลาดการอนุญาต / dev / vchiq อย่างถาวรได้อย่างไร


21

ฉันกำลังทำงานกับการเขียนแอปพลิเคชันกราฟิกที่ใช้ GPU ของ Pi และฉันได้รับ* failed to open vchiq instanceข้อผิดพลาดอย่างต่อเนื่องเมื่อเรียกใช้โปรแกรมของฉัน โดยปกติจะได้รับการแก้ไขโดย a sudo chmod 777 /dev/vchiqแต่ (1) นี่คือการแก้ไขที่ไม่ปลอดภัยอย่างแน่นอนซึ่งไม่เหมาะกับการปรับใช้กับอุปกรณ์ที่ผู้ใช้เป็นเจ้าของและ (2) จะได้รับการรีเซ็ตหลังจากการรีบูตแต่ละครั้ง

ฉันจะแก้ไข/dev/vchiqปัญหา "วิธีที่ถูกต้อง" อย่างต่อเนื่องโดยไม่ต้องแนะนำปัญหาด้านความปลอดภัยได้อย่างไร

คำตอบ:


28

ฉันสามารถแก้ไขปัญหาที่คล้ายกันโดยเพิ่มตัวเองในvideoกลุ่ม (ฉันไม่ได้ใช้ผู้ใช้เริ่มต้น) บางทีนี่อาจช่วยได้

คำสั่งคือ:

sudo usermod -a -G video $(whoami)

คุณจะต้องออกจากระบบและลงชื่อเข้าใช้อีกครั้งเพื่อให้การเปลี่ยนแปลงมีผล


2
สิ่งนี้ใช้งานได้สำหรับฉัน ( sudo usermod -a -G video $(whoami)) ฉันขอแนะนำ (เพื่อความปลอดภัย) เพื่อเพิ่มผู้ใช้เฉพาะสำหรับกระบวนการใด ๆ ที่จะต้องเข้าถึงกล้องและเพิ่มเฉพาะผู้ใช้นั้นในvideoกลุ่ม
n8henrie

3
หลังจากรีบู๊ตโซลูชันถาวรนี้ทำงานได้ดีและค่อนข้างปลอดภัย
Serge Stroobandt

ต้องเริ่มระบบใหม่ ....
Moosa Baloch

2
มันก็ใช้ได้กับฉันเช่นกัน! ขอบคุณ ไม่จำเป็นต้องบูตเครื่องใหม่การออกจากระบบและการเข้าสู่ระบบอีกครั้งก็เพียงพอแล้ว
tuvokki

1
นี่เป็นวิธีที่เหมาะสมและปลอดภัยในการทำ หากคุณมีผู้ใช้เฉพาะสำหรับฟังก์ชั่นนี้คุณสามารถเพิ่มพวกเขาโดยแทนที่ $ (whoami) ด้วยชื่อผู้ใช้นั้น
IceMage

8

คุณสามารถสร้างกฎ udev เพื่อตั้งค่าการอนุญาตเฉพาะบนอุปกรณ์ ในฐานะที่เป็น root คุณสามารถ:

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

วิธีนี้ไม่ได้แก้ไขปัญหา หลังจากทำงานนั้นฉันยังคงได้รับข้อผิดพลาด
Cerin

ฉันสงสัยว่าสิทธิ์จะทำในระดับสูงกว่า (ดังนั้นในภายหลังในลำดับการรัน) กฎ udev ซึ่งจะยกเลิกการเปลี่ยนแปลงนี้ บนพีซีของฉัน (Debian) ระบบที่ให้มาเป็นไฟล์/lib/udev/rules.d/91-permissions.rulesดังนั้นฉันจะลองเขียนสิ่งนี้กับไฟล์ที่สูงกว่า (และอาจรวมชื่อโลคัลไว้ในชื่อเพื่อระบุว่าเป็นการดัดแปลงในเครื่อง) เช่น:echo `SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"\' > /etc/udev/rules.d/92-local-vchiq-permissions.rules
SlySven

ฉันได้รับอนุญาตปฏิเสธสิ่งที่อาจผิดปกติ?
dmigo

ทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน วิธีการแก้ปัญหาที่สง่างามถ้า
usodod

5

คุณสามารถตั้งค่าการSUIDอนุญาต

sudo chmod u+s /dev/vchiq

สิ่งนี้ทำอะไร
fouric

1
เมื่อไฟล์ที่ปฏิบัติการได้ถูกกำหนดให้setuidผู้ใช้ปกติในระบบที่มีสิทธิ์ในการดำเนินการไฟล์นี้จะได้รับสิทธิ์ของผู้ใช้ที่เป็นเจ้าของไฟล์ (โดยทั่วไปรูท) คุณสามารถตั้งค่านี้ในโปรแกรมของคุณ (สมมติว่ามันเป็นของ root) ในฐานะที่/dev/vchiqเป็นสมาชิกของกลุ่มvideoอีกทางเลือกหนึ่งคือการตั้งค่าและกลุ่มที่เกี่ยวกับโปรแกรมของคุณไปsetgid video
Milliways

1
ไม่ได้ช่วยอะไรแม้ว่าผู้ใช้www-dataจะอยู่ในvideoกลุ่ม แต่ฉันก็ประสบความสำเร็จกับchmod a+rw /dev/vchiqRaspbian Stretch
Jan Turoň

0

เพิ่ม

start_x=1 
gpu_mem=256

เพื่อboot/config.txtเรียกใช้sudo raspistill -o cam.jpg

แน่นอนฉันเพิ่มเส้นทางสำหรับ raspistill มันใช้งานได้สำหรับฉันใน Ubuntu


ฉันไม่เห็นว่าสิ่งนี้ตอบคำถามของ OP อย่างไร - คุณช่วยขยายคำตอบของคุณเพื่ออธิบายว่ามันทำงานกับ Raspberry Pi ได้อย่างไร?
SlySven

0

หากคุณใช้ raspistill จากสคริปต์ php ที่เข้าถึงผ่านเบราว์เซอร์คุณต้องป้อน: sudo usermod -a -G video www-data เพื่อให้สิทธิ์ Apache ที่จำเป็นแก่ Apache

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.