Как я могу отвязать устройство без sudo?

Вопрос или проблема

В настоящее время я использую следующую команду для отключения / включения сенсорного экрана.

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 с разрешением без пароля

  1. Создайте Bash-скрипт для выполнения команды. Например, создайте файл с именем unbind_device.sh и вставьте в него следующий код:

    #!/bin/bash
    echo "<device-id>" > /sys/bus/hid/drivers/hid-multitouch/unbind

    Замените <device-id> на фактический идентификатор устройства, который вы хотите отключить.

  2. Сделайте скрипт исполняемым:

    chmod +x unbind_device.sh
  3. Настройте 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 без ввода пароля.

  4. Создайте сочетание клавиш для выполнения команды sudo /path/to/unbind_device.sh в вашей среде рабочего стола, чтобы упростить доступ к функции.

Способ 2: Использование прав доступа на уровень бинарного файла

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

  1. Напишите программу на 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;
    }
  2. Скомпилируйте программу:

    gcc -o unbind_device unbind_device.c
  3. Выдайте нужные права с помощью setcap:

    sudo setcap CAP_DAC_OVERRIDE ./unbind_device

    Эта команда даст исполняемому файлу права, необходимые для записи в защищенный файл без повышения привилегий.

  4. Создайте сочетание клавиш для выполнения ./unbind_device в вашей среде рабочего стола.

Заключение

Оба метода позволяют вам отключать устройство без необходимости вводить пароль sudo каждый раз. Вы можете выбрать тот подход, который вам больше подходит: скрипт или бинарная программа. Убедитесь, что вы подставили актуальный идентификатор устройства в обоих решениях. Это значительно упростит вашу работу и сделает управление устройством более удобным.

Оцените материал
Добавить комментарий

Капча загружается...