Инвертирование статуса сети с помощью rfkill на ubuntu + cinnamon

Я использую ubuntu с корицей, и мне надоело отсутствие переключателя bluetooth и необходимость использовать rfkill для выключения BT. На данный момент я использую blueman для включения BT и управления устройствами и подключениями, а также использую rfkill на своем терминале, чтобы выключить его после того, как я закончил его использовать. Я хотел создать интерактивный макрос (например, в виде апплета корицы, который будет отображаться на моей панели задач), который будет включать и выключать BT.

Мой вопрос: есть ли команда rfkill, которая позволяет вам просто инвертировать состояние устройства ( это разблокировка, если заблокирована и заблокирована, если разблокирована)?

0
задан 22 October 2020 в 12:14

1 ответ

В rfkill нет флага инвертирования, и нет альтернативного инструмента cli, который может это сделать. Вы можете написать для него небольшой скрипт, подобный приведенному ниже, и запустить скрипт с помощью привязки клавиш.

Примечание: Вам нужно будет добавить своего пользователя в файл sudoers, чтобы запускать rfkill без пароля.

#!/bin/bash
BTDEVNO=1
currentState=$(rfkill list $BTDEVNO)
if [[ $currentState =~ ": no" ]]; then
    echo "Unblocked, going to block";
    sudo rfkill block $BTDEVNO;
else
    echo "Blocked, going to unblock";
    sudo rfkill unblock $BTDEVNO;
fi

Редактировать - О sudoers (сделано Bruh):

Чтобы добавить rfkill в список sudoers, введите sudo visudo, а затем добавьте следующее в конец файла под %sudo строка :

user_name : ALL=(ALL) NOPASSWD : /usr/sbin/rfkill

Это позволит запускать rfkill без необходимости ввода пароля sudo.

Редактировать 2. Небольшое изменение в сценарии (сделано Брухом):

Если кажется, что скрипт всегда видит BT заблокированным, несмотря на то, что список rfkill вручную показывает, что он разблокирован, попробуйте заменить оператор if следующим:

if echo $currentState | grep 'Bluetooth Soft blocked: no'; then
]
1
ответ дан 22 October 2020 в 10:55

Другие вопросы по тегам:

Похожие вопросы: