Я использую ubuntu с корицей, и мне надоело отсутствие переключателя bluetooth и необходимость использовать rfkill для выключения BT. На данный момент я использую blueman для включения BT и управления устройствами и подключениями, а также использую rfkill на своем терминале, чтобы выключить его после того, как я закончил его использовать. Я хотел создать интерактивный макрос (например, в виде апплета корицы, который будет отображаться на моей панели задач), который будет включать и выключать BT.
Мой вопрос: есть ли команда rfkill, которая позволяет вам просто инвертировать состояние устройства ( это разблокировка, если заблокирована и заблокирована, если разблокирована)?
В 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
]