Bạn kiểm soát quyền truy cập vào thiết bị giống như cách bạn kiểm soát quyền truy cập vào tệp: Bằng cách xem quyền và quyền sở hữu và thực thi chương trình với tư cách là người dùng có quyền truy cập hoặc là thành viên của nhóm có quyền truy cập.
Tuy nhiên, ít nhất là trên hệ thống của tôi,
$ ll /dev/console
crw------- 1 root root 5, 1 Nov 29 06:59 /dev/console
các quyền /dev/console
được giới hạn chỉ dành cho root (có thể vì lý do chính đáng), vì vậy bạn cần chạy nó dưới quyền root hoặc sửa đổi các udev
quy tắc để tạo /dev/console
với một nhóm khác, sau đó chạy chương trình với tư cách là thành viên của nhóm này (với setgid bit, hoặc cách khác).
Nhưng có một cách tốt hơn để truy cập loa PC (điều ít được biết đến): Loa hiển thị dưới dạng thiết bị sự kiện đầu vào và bằng cách ghi vào loa ở định dạng chính xác, bạn có thể điều khiển trực tiếp loa (bao gồm cả tần số). Symlink độc lập hệ thống cho đó là
/dev/input/by-path/platform-pcspkr-event-spkr
và nếu bạn theo liên kết tượng trưng, bạn sẽ thấy một cái gì đó tương tự như
$ ll /dev/input/by-path/platform-pcspkr-event-spkr
lrwxrwxrwx 1 root root 9 Nov 29 06:57 /dev/input/by-path/platform-pcspkr-event-spkr -> ../event5
$ ll /dev/input/event5
crw-rw---- 1 root input 13, 69 Nov 29 06:57 /dev/input/event5
Vì vậy, bất kỳ thành viên nào trong input
nhóm đều có thể ghi vào thiết bị này, an toàn hơn là chạy nó như root
.
Định dạng của các sự kiện được sử dụng bởi hệ thống đầu vào được mô tả trong /usr/src/linux/Documentation/input/input.txt
và các tệp bao gồm. Nó đun sôi xuống
struct input_event {
struct timeval time;
unsigned short type;
unsigned short code;
unsigned int value;
}
với một loại EV_SND
("âm thanh"), nghĩa là , 0x12
. Chỉ cần viết một cấu trúc như vậy vào tập tin. Bạn thậm chí không cần C cho việc này, perl từ dòng lệnh sẽ làm, ví dụ:
perl -e 'print pack("qssl", 0, 0x12, 2, 2000)' > /dev/input/by-path/platform-pcspkr-event-spkr
và tắt tiếng bíp
perl -e 'print pack("qssl", 0, 0x12, 2, 0)' > /dev/input/by-path/platform-pcspkr-event-spkr
pcspkr
dưới dạng cơ chế thiết bị đầu vào. Tôi thực hiện cách tiếp cận thứ hai vì nó là phương pháp ưu việt.