Làm cách nào để cho phép người dùng không mặc định sử dụng thiết bị nối tiếp ttyUSB0?


35

Tôi có hệ thống Ubuntu 11.10 với 2 người dùng:

  • Cái đầu tiên được tạo ra trong quá trình cài đặt
  • Cái thứ hai thay vào đó được tạo ra sau. Nó thuộc về nhóm sudoers.

Bây giờ vấn đề là khi cái thứ hai cố gắng sử dụng một thiết bị ttyUSB0, lỗi sau được trả về:

"Could not open serial port /dev/ttyUSB0"

Tôi đã có thể sửa nó bằng cách sử dụng:

sudo chown :second_user /dev/ttyUSB0

Tuy nhiên khi tôi ngắt kết nối thiết bị và kết nối lại thì sự cố đã quay trở lại.

Có cách nào để cho phép người dùng khác nhau truy cập vào thiết bị không? Tôi cho rằng tôi phải thêm người dùng vào một nhóm cụ thể. Hiện tại chủ sở hữu rootvà nhóm là dialout. Tuy nhiên tôi không chắc chắn về nhóm và tôi không biết cách thêm người dùng.

Cảm ơn!

Câu trả lời:


48

Như bạn đã nhận thấy, /dev/ttyUSB0thiết bị có nhóm dialout. Tất cả những gì bạn cần làm là thêm người dùng thứ hai vào dialoutnhóm:

sudo adduser second_user dialout

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


Cảm ơn Jeremy! Có phải công việc này cũng cho truy cập ssh? Bởi vì khi tôi truy cập pc qua ssh tôi thấy hai người dùng có cùng tên. Tôi cho rằng một người là người dùng cục bộ và người kia là người ssh. Làm cách nào tôi có thể trao quyền sở hữu cho người dùng ssh?
Maverik

1
Điều này sẽ cho phép second_user truy cập cổng nối tiếp từ bất kỳ thông tin đăng nhập, ssh hoặc cục bộ nào. Bạn không cần chỉ định quyền sở hữu cho một thông tin đăng nhập cụ thể của người dùng đó.
Jeremy Kerr

2
Vâng, bạn đúng. Tôi đã phải đăng xuất và sau đó đăng nhập lại để có quyền truy cập vis ssh.
Maverik

Đối với các phiên của người dùng đã được đăng nhập tự động, bạn cần khởi động lại máy tính, không chỉ để đăng nhập lại vào X Window System. Quan sát với Ubuntu 19.04.
Tanius

12

Cách dễ dàng:

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

Lưu văn bản này:

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

Rút phích cắm thiết bị và cắm lại, và nó nên được đọc / ghi từ bất kỳ người dùng nào!


Hoạt động trong 14.04 cho thiết bị sản xuất tại nhà trong ổ cắm ttyACM. Cảm ơn. +1
NonSt ChuẩnModel

Bạn không cần phải làm điều này trước khi tải lại để tải lại các quy tắc? sudo udevadm control --reload?
Alexis Paques

Tùy thuộc vào hệ thống tập tin nào lưu trữ / etc / udev của bạn và phiên bản udev nào bạn có, bạn thực sự có thể cần phải tải lại một cách rõ ràng. Nhưng trên hầu hết các máy tôi đã sử dụng, udev dường như tự động tìm ra nó (sử dụng inotify).
Orion Lawlor

Đó thực sự không phải là cách nó phải được thực hiện. Các thiết bị nối tiếp USB phải thuộc nhóm quay số hoặc tương tự, và người dùng nên được thêm vào đó. Tuy nhiên, những gì bạn đang đề xuất sẽ có ý nghĩa đối với các loại thiết bị USB khác
Chris Stratton

7

Bạn có thể sử dụng UDEV. Đây là một hệ thống kích hoạt mỗi lần cắm hoặc rút phích cắm thiết bị (trong số các thiết bị khác). Với nó, bạn kịch bản nhiều thứ sẽ xảy ra, bao gồm thiết lập quyền.

Chạy sudoedit /etc/udev/rules.d/50-ttyusb.rulesvà dính này trong đó:

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

Lưu, thoát và cắm lại và bạn nên chạy và chạy. Đặt quyền thành 666 cho phép mọi người ghi vào thiết bị.

Tôi đang dựa trên trang này từ vài năm trước nhưng một cái gì đó như thế này sẽ hoạt động nếu giải pháp của Jeremy không có.


1
Điều này làm việc cho tôi, nghĩa là tôi đã sử dụng các quy tắc udev, nhưng tôi đã thay đổi cú pháp để phù hợp với trường hợp của riêng tôi. linux.m2osw.com/sane-cannot-find-any-scanners - lưu ý rằng nếu bạn sử dụng MODE = "0666" thì có lẽ bạn không cần NHÓM. Chỉ một hoặc khác sẽ hữu ích.
Alexis Wilke

5

Fantastic - giải pháp UDEV đưa ra ở đây là tấm vé cho tôi.

Tôi đã cài đặt chương trình CS-F3020_F5010_F5020 của Icom qua Wine, tạo liên kết cho cổng Com như sau:

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

Sau đó, tôi nhận ra rằng tôi cần thay đổi quyền trên / dev / ttyUSB0 để cho phép tôi truy cập nó. Điều đó hoạt động rất tốt cho đến khi bạn rút / cắm lại USB, sau đó bạn cần thay đổi lại các quyền.

Tôi đã thử thêm người dùng của mình vào nhóm quay số nhưng điều này không giải quyết được vấn đề vì một số lý do.

Sử dụng UDEV giải quyết phần cuối cùng của câu đố. Bây giờ tôi có thể lập trình radio Icom của mình bằng Linux, cắm và rút phích cắm thiết bị USB / Nối tiếp mà không cần phải bận tâm thêm nữa. Woohoo. Cảm ơn.


3

Các quy tắc udev hoạt động nhưng như được viết, chúng có tác dụng phụ rất khó chịu là làm cho tất cả các ttyUSB*thiết bị có thể truy cập được cho mọi người. Điều này là không tốt vì đó có thể là một rủi ro bảo mật tùy thuộc vào những gì khác trên hệ thống.

Thay vào đó sử dụng một quy tắc udev chọn lọc hơn. Ví dụ: tôi có một thiết bị USB vận hành một bộ các công tắc. Từ dmesg khi được cắm vào, tôi có thể thấy ID của nhà sản xuất và mã sản phẩm (cộng với, thậm chí, trong trường hợp này là số sê-ri cho thiết bị). Tôi có thể thêm:

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

cho các dòng kernel ở trên và quy tắc sẽ chỉ áp dụng cho thiết bị đó. Thậm chí tốt hơn là chỉ gán cho MODEbiến một mình, hãy đặt nhóm:

GROUP="whatever", MODE="0660"

sau đó chỉ những người trong nhóm ' whatever' sẽ có quyền truy cập ghi.

John Bowler

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.