Що визначає дозволи в / dev?


11

У мене виникла помилка, де дозволи на /dev/input/event*невірні, тому коли я використовую Mumble , програма не може виявити натискання клавіш. Якщо я запускаю таку команду, вона "виправляє" проблему, але мені хотілося б постійного виправлення.

sudo chmod a+r /dev/input/event/*

Що визначає дозволи /dev/input/event*та як їх постійно встановлювати?


6
Зауважте, що якщо ви даєте "всім" дозвіл на читання, /dev/input/event/*ви, по суті, надаєте всім доступ нюхати клавіатуру, наприклад паролі, які ви вводите. Для однокористувацької системи це може бути не так вже й важливим, але навіть у однокористувацькій системі ми зазвичай використовуємо користувачів системи як додатковий рівень безпеки, якщо якийсь компонент порушений, і, наприклад, надаючи nobodyкористувачеві доступ до вашої клавіатури вхідний потік ви послаблюєте цей захист. Хоча це може "виправити" Mumble, це не є належним загальним рішенням вашої проблеми. Має бути кращий спосіб.
Робі Басак

3
@popey Чи можете ви сказати більше про те, чому дозволи на вузли в /dev/inputнеправильних і які права власності та дозволи на даний момент є (можливо, з результатом ls -l)? Чи проблема в тому, що inputгрупа не має дозволу на читання (або що вона не є власником групи)? У моїй системі файли подій мають root:inputправо власності, і користувачі, і власники групи можуть читати з них. Якщо у вас цього немає, можливо, вам варто спробувати налаштувати його таким чином, а не дозволяти кожному читати їх. Якщо у вас це є, Мамблу, можливо, буде достатньо працювати з повноваженнями inputгрупи.
Eliah Kagan

@EliahKagan, що ти думаєш про мою відповідь? ви можете, будь ласка, переглянути його?
Сергій Колодяжний

так, це погано використовувати ACL. дивіться мою відповідь нижче
solsTiCe

Чи можете ви мені повідомити версію дистрибутива або xorg-сервер? тому що xorg-сервер 2: 1.9.99.902-2ubuntu1 вирішив проблему.
Тохід Тамболі

Відповіді:


4

Більш гнучким способом управління дозволом на файли є використання ACL .

sudo setfacl -m u:popey:rw /dev/input/eventx

Якщо вам дійсно потрібно зробити це постійним, тоді ви можете використовувати правила udev, які встановлюють його для вашого пристрою введення події

додайте файл /etc/udev/rules.d/99-userdev-input.rules за допомогою:

KERNEL=="event*", SUBSYSTEM=="input", RUN+="/usr/bin/setfacl -m u:popey:rw $env{DEVNAME}"

ви можете перевірити дозвіл ACL

getfacl /dev/input/event*

2

Я не знаю, що спочатку встановлює дозволи символьних пристроїв / dev / input / event *

але я знаю, що ви можете змінити ці дозволи за допомогою програмного забезпечення, яке за замовчуванням є у вашій системі як частина coreutils. дивіться команду man mknod.

Дозволи на мої пристрої подій:

crw-rw ---- 1 кореневий вхід 13, 64 квітня 06 06:39 / dev / input / event0

ось кілька прикладів використання:

~$ sudo mknod lolwat c 4 64 
~$ sudo mknod lolwatnow c 4 64  -m 777
~$ ls -l lolwat*
crw-r--r-- 1 root root 4, 64 Apr 14 08:07 lolwat
crwxrwxrwx 1 root root 4, 64 Apr 14 08:08 lolwatnow

якщо вам потрібна додаткова інформація про прийняття рішення про основні та незначні номери, подивіться тут

Тепер ви кажете, що дозволи невірні. Отже, щось повинно встановлювати їх неправильно, і ця річ повинна працювати як корінь. mknod можна було б використовувати для створення пристрою, але mkdev також. ви можете переглянути дозволи будь-яких дій за замовчуванням для mkdev та mknod.

Як і в моїх прикладах: / dev / input / event0 має права дозволу на crw-rw, але права доступу за замовчуванням для lolwat були встановлені на crw-r - r--

У мене є певна невизначеність, чи диктує тип пристрою оригінальні дозволи. Ви можете це експериментувати, щоб дізнатися.

Ось ще одне посилання для отримання додаткової інформації про mknod


mumble працює як root?
j0h

1

По суті, вам потрібно буде додати файл /etc/udev/rules.d/(ви можете назвати його чимось на зразок 75-input-events.conf)

І додайте рядки KERNEL=="eventX" , SUBSYSTEM=="input", MODE="0777"для кожної події у цей файл, де x - число. Наприклад, у мене події від 0 до 9, тому я особисто робив би для кожного з них. Остання відповідь на цю тему припускає, що ви могли також додати KERNEL==event*(тобто, з підказкою).


0

Моя пропозиція полягає в тому, щоб ви встановили утиліти програми

sudo -i
apt-get update
apt-get install input-utils

Це набір утиліт, які корисні при роботі з вхідним шаром ядра Linux (версія 2.6 та пізніших версій). Включені утиліти для переліку відомих ядра пристроїв введення, показу подій введення, які отримує пристрій, та запиту або зміни карт клавіатури.

Цікава команда:

sudo -i 
lsinput

Він скидає всі пристрої введення та пов'язані з ними деталі про пристрій.

Можна спостерігати події введення за допомогою команди, вказуючи N-й номер пристрою:

sudo -i
input-events <device number>

Потім можна скинути відображення на клавіатурі певного пристрою події за допомогою команди, вказавши N-й номер пристрою:

sudo -i
input-kyb <device number>

За допомогою цих інструментів можна налагодити систему, щоб побачити, чи вводяться джерела очікуваних кодів подій, а отже, допоможе розібратися з такими проблемами, як, наприклад, ключі не працюють чи відображені неправильно.

Udev - менеджер пристроїв для ядра Linux. Він керує вузлами пристрою в / dev та обробляє всі дії з простором користувача під час додавання чи видалення пристроїв.

Evdev - це загальний інтерфейс подій введення в ядрі Linux. Він узагальнює вихідні події вводу з драйверів пристроїв та робить їх доступними через символьні пристрої в /dev/input/каталозі.

Кожен раз, коли відбувається зміна в структурі пристрою, ядро ​​випромінює uevent, який отримує udev. Потім udev дотримується правил, задекларованих у каталогах /etc/udev/rules.d, /run/udev/rules.d та /lib/udev/rules.d.

Виходячи з інформації, що міститься всередині uevent, він знаходить правило або правила, які йому потрібно викликати, і виконує необхідні дії.

Ці дії можуть створювати або видаляти файли пристроїв, але також можуть викликати завантаження певних файлів мікропрограмного забезпечення в пам'ять ядра.


0

У термінальному виконанні:

sudo nano -b /etc/rc.local

Переходьте до рядка, який пише "вихід 0", і в рядку над ним введіть:

sudo chmod a + r / dev / input / подія

Натисніть Ctrl + x, щоб вийти з цього. Він запитає, чи хочете ви зекономити. Ударить у. Він запитає, як заощадити. Просто натисніть Enter.

Тепер ця команда повинна запускатися при кожному завантаженні і, таким чином, надавати вам дозволи в цій папці. Файл /etc/rc.local автоматично має привілеї root, тому для цього вам не потрібно буде вводити пароль.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.