Переключение Wi-Fi с помощью XF86WLAN и скрипта - PullRequest
3 голосов
/ 12 июля 2020

У меня есть следующий сценарий (в моем PATH):

#!/usr/bin/env bash

main()
{
   local state=$(sudo rfkill list wifi -n -o SOFT)
   if [[ $state == 'blocked' ]]
   then
       sudo rfkill unblock wifi
       state='Unblocked'
   else
       sudo rfkill block wifi
       state='Blocked'
   fi

   notify-send 'Wi-Fi' "$state"
   exit 0
}

main $@

Запуск сценария из командной строки работает должным образом, затем я добавляю следующий ярлык в свой .xbindkeysrc:

"kill-wifi"
     XF86WLAN

Но уведомления и интерфейс Wi-Fi застревают в одном из двух состояний, blocked или unblocked, он не переключается. Иногда, если я нажимаю несколько раз клавишу XF86WLAN, я переключаюсь.

Странно то, что использование другой клавиши для запуска скрипта, например F8 , все это работает нормально, но я хочу оставить F8 для других целей, кроме переключения Wi-Fi.

Итак, одна из моих догадок заключалась в том, что есть «что-то», связывающее XF86LAN KeySym, что приводит к сбоям при запуске моего скрипта. Но затем комментируя команду, которая фактически уничтожает интерфейс WiFi, выдает правильные уведомления (но я на самом деле не делаю ничего полезного).

Любые указатели приветствуются.

1 Ответ

0 голосов
/ 13 июля 2020

В любом случае, для всех, кто находится в моей ситуации, установите urfkill, который автоматически прослушивает событие XF86WLAN. Затем в вашем скрипте просто создайте уведомление:

#!/usr/bin/env bash

main()
{
   local state=$(sudo rfkill list wifi -n -o SOFT)
   notify-send "Wi-Fi" "$state"
}
main

Обратите внимание, что скрипт использует другую утилиту с именем rfkill только для получения состояния интерфейса Wi-Fi и вставляет его в уведомление.

Наконец, в вашем .xbindkeysrc:

"kill-wifi"
    XF86WLAN

Вы можете использовать другой демон горячих клавиш, например sxhkd или даже файл конфигурации i3 или sway , в любом случае ваш сценарий оболочки используется только для уведомления о состоянии интерфейса Wi-Fi, реальная работа по включению и отключению Wi-Fi выполняется urfkill.

Хорошая новость заключается в том, что теперь эта кнопка с маленьким символом антенны на вашем ноутбуке фактически включает / выключает вашу карту Wi-Fi, и вы все еще можете свободно использовать базовую функциональную клавишу (F8 в моем случае); -)

PS Если кто-нибудь прочитает это и знает, почему мой первый подход не удался (состояние гонки или что-то еще), пожалуйста, дайте мне знать, как решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...