ฉันจะอนุญาตให้ผู้ใช้ที่ไม่ใช่ค่าเริ่มต้นใช้อุปกรณ์อนุกรม ttyUSB0 ได้อย่างไร


34

ฉันมีระบบ Ubuntu 11.10 ที่มีผู้ใช้ 2 คน:

  • ครั้งแรกที่ถูกสร้างขึ้นในระหว่างการติดตั้ง
  • ที่สองแทนถูกสร้างขึ้นหลังจาก มันเป็นของกลุ่ม sudoers

ตอนนี้ปัญหาคือเมื่อครั้งที่สองพยายามที่จะใช้อุปกรณ์ttyUSB0ข้อผิดพลาดต่อไปนี้จะถูกส่งกลับ:

"Could not open serial port /dev/ttyUSB0"

ฉันสามารถแก้ไขได้โดยใช้:

sudo chown :second_user /dev/ttyUSB0

อย่างไรก็ตามเมื่อฉันตัดการเชื่อมต่ออุปกรณ์และเชื่อมต่อใหม่ปัญหาก็จะกลับมา

มีวิธีการอนุญาตให้ผู้ใช้อื่นเข้าถึงอุปกรณ์หรือไม่ ฉันคิดว่าฉันต้องเพิ่มผู้ใช้ในกลุ่มเฉพาะ ปัจจุบันเป็นเจ้าของและกลุ่มที่เป็นroot dialoutอย่างไรก็ตามฉันไม่แน่ใจเกี่ยวกับกลุ่มและฉันไม่รู้วิธีเพิ่มผู้ใช้

ขอบคุณ!

คำตอบ:


47

ตามที่คุณสังเกตเห็นอุปกรณ์มีกลุ่มของ/dev/ttyUSB0 dialoutสิ่งที่คุณต้องทำคือเพิ่มผู้ใช้คนที่สองในdialoutกลุ่ม:

sudo adduser second_user dialout

second_user จะต้องออกจากระบบ & ลงชื่อเข้าใช้อีกครั้งเพื่อให้การดำเนินการนี้มีผล


ขอบคุณเจเรมี! ใช้งานได้กับการเข้าถึง ssh ด้วยหรือไม่ เพราะเมื่อฉันเข้าถึงพีซีผ่าน ssh ฉันเห็นผู้ใช้สองคนที่มีชื่อเดียวกัน ฉันคิดว่าหนึ่งคือผู้ใช้ท้องถิ่นและอีกคนหนึ่ง ssh ฉันจะมอบความเป็นเจ้าของให้กับผู้ใช้ ssh ได้อย่างไร?
Maverik

1
สิ่งนี้จะอนุญาตให้ second_user เข้าถึงพอร์ตอนุกรมจากการล็อกอิน ssh หรือโลคอลใด ๆ คุณไม่จำเป็นต้องกำหนดความเป็นเจ้าของให้กับการเข้าสู่ระบบของผู้ใช้นั้น
Jeremy Kerr

2
ใช่คุณถูก. ฉันต้องออกจากระบบแล้วลงชื่อเข้าใช้อีกครั้งเพื่อให้เข้าถึง vis ssh
Maverik

สำหรับเซสชันของผู้ใช้ที่ล็อกอินโดยอัตโนมัติคุณต้องรีบูตคอมพิวเตอร์ไม่ใช่แค่ลงชื่อเข้าใช้ระบบ X Window อีกครั้ง พบกับ Ubuntu 19.04
tanius

12

วิธีที่ง่าย:

sudoedit /etc/udev/rules.d/50-myusb.rules

บันทึกข้อความนี้:

KERNEL=="ttyUSB[0-9]*",MODE="0666"
KERNEL=="ttyACM[0-9]*",MODE="0666"

ถอดปลั๊กอุปกรณ์แล้วทำการถอดออกและควรอ่าน / เขียนจากผู้ใช้คนใดก็ได้!


ทำงานใน 14.04 สำหรับอุปกรณ์ทำที่บ้านในซ็อกเก็ต ttyACM ขอบคุณ +1
NonStandardModel

คุณไม่จำเป็นต้องทำสิ่งนี้ก่อนที่จะทำการเติมเพื่อโหลดกฎหรือไม่ sudo udevadm control --reload?
Alexis Paques

ขึ้นอยู่กับระบบไฟล์ที่เก็บ / etc / udev ของคุณและรุ่นของ udev ที่คุณมีคุณอาจต้องโหลดใหม่อย่างชัดเจน แต่สำหรับเครื่องส่วนใหญ่ที่ฉันเคยใช้ดูเหมือนว่า udev จะคิดออกโดยอัตโนมัติ (ใช้ inotify)
Orion Lawlor

นั่นไม่ใช่วิธีที่ควรจะทำ อุปกรณ์ USB แบบอนุกรมควรอยู่ในกลุ่มการโทรออกหรือคล้ายกันและผู้ใช้ควรเพิ่มเข้าไป สิ่งที่คุณเสนอจะเหมาะสมสำหรับอุปกรณ์ USB ประเภทอื่น ๆ
Chris Stratton

7

คุณสามารถใช้ UDEV เป็นระบบที่ทริกเกอร์ทุกครั้งที่เสียบหรือถอดปลั๊กอุปกรณ์ (รวมถึงอุปกรณ์อื่น ๆ ) ด้วยคุณสคริปต์สิ่งต่าง ๆ ที่จะเกิดขึ้นรวมถึงการตั้งค่าการอนุญาต

เรียกใช้sudoedit /etc/udev/rules.d/50-ttyusb.rulesและติดสิ่งนี้ในที่นั่น:

KERNEL=="ttyUSB[0-9]*",NAME="tts/USB%n",SYMLINK+="%k",GROUP="uucp",MODE="0666"

บันทึกออกและแทนที่และคุณควรจะทำงาน การตั้งค่าการอนุญาตเป็น 666 อนุญาตให้ทุกคนเขียนไปยังอุปกรณ์ได้

ฉันกำลังอ้างอิงจากหน้านี้ซึ่งมาจากไม่กี่ปีที่ผ่านมา แต่สิ่งนี้ควรจะทำงานได้ถ้าวิธีการแก้ปัญหาของ Jeremy ไม่ได้


1
สิ่งนี้ใช้ได้กับฉันนั่นคือฉันใช้กฎ udev แต่ฉันเปลี่ยนไวยากรณ์เพื่อให้ตรงกับกรณีของฉันเอง linux.m2osw.com/sane-cannot-find-any-scanners - โปรดทราบว่าหากคุณใช้ MODE = "0666" คุณอาจไม่ต้องการ GROUP มีเพียงหนึ่งรายการเท่านั้นที่จะมีประโยชน์
Alexis Wilke

5

ยอดเยี่ยม - โซลูชัน UDEV ที่มอบให้ที่นี่คือตั๋วสำหรับฉัน

ฉันติดตั้งโปรแกรม CS-F3020_F5010_F5020 ของ Icom ผ่านทางไวน์สร้างลิงค์สำหรับพอร์ต Com ดังนี้:

ln -s /dev/ttyUSB0 ~/.wine/dosdevices/com1 but nothing. 

จากนั้นฉันก็รู้ว่าฉันต้องเปลี่ยนการอนุญาตใน / dev / ttyUSB0 เพื่อให้ฉันสามารถเข้าถึงได้ ใช้งานได้ดีจนกระทั่งคุณถอด / เสียบปลั๊ก USB ใหม่จากนั้นคุณต้องเปลี่ยนสิทธิ์ใหม่

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

การใช้ UDEV แก้ปริศนาชิ้นสุดท้าย ตอนนี้ฉันสามารถตั้งโปรแกรมวิทยุ Icom ของฉันโดยใช้ Linux, เสียบและถอดปลั๊กอุปกรณ์ USB / Serial โดยไม่ต้องยุ่งยากอีกต่อไป ดีจัง ขอบคุณ


3

กฎของ udev ทำงานได้ แต่ตามที่เขียนไว้พวกเขามีผลข้างเคียงที่น่ารังเกียจอย่างยิ่งในการทำให้ทุกคนttyUSB*สามารถเข้าถึงอุปกรณ์ทั้งหมดได้ สิ่งนี้ไม่ดีเพราะอาจมีความเสี่ยงด้านความปลอดภัยขึ้นอยู่กับสิ่งอื่นในระบบ

ใช้กฎ udev ที่เลือกมากกว่าแทน ตัวอย่างเช่นฉันมีอุปกรณ์ USB ที่ใช้งานชุดสวิตช์ จาก dmesg เมื่อเสียบปลั๊กฉันสามารถเห็น ID ของผู้ผลิตและรหัสผลิตภัณฑ์ (บวกแม้ในกรณีนี้หมายเลขซีเรียลสำหรับอุปกรณ์) ฉันสามารถเพิ่ม:

ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001"

กับเคอร์เนลบรรทัดด้านบนและกฎจะใช้กับอุปกรณ์นั้นเท่านั้น ดียิ่งกว่าแทนที่จะกำหนดให้กับMODEตัวแปรเพียงอย่างเดียวตั้งค่ากลุ่มด้วย:

GROUP="whatever", MODE="0660"

จากนั้นเฉพาะคนในกลุ่ม ' whatever' เท่านั้นที่จะได้รับสิทธิ์ในการเขียน

John Bowler

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