Вопрос или проблема
В настоящее время я использую следующую команду для отключения / включения сенсорного экрана.
sudo bash -c 'echo "<device-id>" > /sys/bus/hid/drivers/hid-multitouch/unbind'
Есть ли способ сделать это, не вводя мой пароль каждый раз? Я хотел бы привязать это к сочетанию клавиш.
У него владелец root и разрешение 0400, поэтому только root или процесс с возможностями CAP_DAC_OVERRIDE может записывать в него.
Вы можете создать простой bash-скрипт
#!/bin/bash
echo "<device-id>" > /sys/bus/hid/drivers/hid-multitouch/unbind
и настроить sudo, чтобы разрешить вам выполнять только этот скрипт с привилегиями и без пароля. Как запустить конкретную программу от имени root без запроса пароля?
В качестве альтернативы вы можете написать тривиальную программу, скомпилировать ее в бинарный файл, а затем дать бинарному файлу привилегии для выполнения этой операции. Предпочтительно:
$ sudo setcap CAP_DAC_OVERRIDE ./myprog
см. страницы man для capabilities(7) и setcap(8).
Ответ или решение
Чтобы отключить устройство без необходимости вводить пароль с помощью sudo
, вам понадобятся соответствующие настройки для выполнения вашей команды с повышенными привилегиями. Ниже приведены два основных метода, которые помогут вам достигнуть этой цели.
Способ 1: Использование sudo
с разрешением без пароля
-
Создайте Bash-скрипт для выполнения команды. Например, создайте файл с именем
unbind_device.sh
и вставьте в него следующий код:#!/bin/bash echo "<device-id>" > /sys/bus/hid/drivers/hid-multitouch/unbind
Замените
<device-id>
на фактический идентификатор устройства, который вы хотите отключить. -
Сделайте скрипт исполняемым:
chmod +x unbind_device.sh
-
Настройте
sudoers
, чтобы разрешить выполнение скрипта без ввода пароля:
Для этого откройте файлsudoers
с помощью команды:sudo visudo
Добавьте в конце файла следующую строку, заменив
/path/to/unbind_device.sh
на путь к вашему скрипту:your_username ALL=(ALL) NOPASSWD: /path/to/unbind_device.sh
Замените
your_username
на ваше имя пользователя. Теперь вы сможете вызывать этот скрипт с помощью командыsudo /path/to/unbind_device.sh
без ввода пароля. -
Создайте сочетание клавиш для выполнения команды
sudo /path/to/unbind_device.sh
в вашей среде рабочего стола, чтобы упростить доступ к функции.
Способ 2: Использование прав доступа на уровень бинарного файла
Если вы предпочитаете более программный подход, вы можете создать простую программу, которая будет выполнять нужную команду.
-
Напишите программу на C:
Например, создайте файл с именем
unbind_device.c
:#include <stdio.h> #include <stdlib.h> int main() { FILE *file = fopen("/sys/bus/hid/drivers/hid-multitouch/unbind", "w"); if (file == NULL) { perror("Error opening file"); return 1; } fprintf(file, "<device-id>\n"); // замените <device-id> на нужный вам идентификатор устройства fclose(file); return 0; }
-
Скомпилируйте программу:
gcc -o unbind_device unbind_device.c
-
Выдайте нужные права с помощью
setcap
:sudo setcap CAP_DAC_OVERRIDE ./unbind_device
Эта команда даст исполняемому файлу права, необходимые для записи в защищенный файл без повышения привилегий.
-
Создайте сочетание клавиш для выполнения
./unbind_device
в вашей среде рабочего стола.
Заключение
Оба метода позволяют вам отключать устройство без необходимости вводить пароль sudo
каждый раз. Вы можете выбрать тот подход, который вам больше подходит: скрипт или бинарная программа. Убедитесь, что вы подставили актуальный идентификатор устройства в обоих решениях. Это значительно упростит вашу работу и сделает управление устройством более удобным.