Идея скрипта-разблокировщика bluetooth:
rfkill list | grep -i bluetooth
2: hp-bluetooth: Bluetooth
3: hci0: Bluetooth
rfkill list | grep -i bluetooth | awk -F : '{print $1}'
2
3
rfkill list 2 3
2: hp-bluetooth: Bluetooth
Soft blocked: no
Hard blocked: no
3: hci0: Bluetooth
Soft blocked: no
Hard blocked: no
...
cat $(grep -l bluetooth /sys/class/rfkill/rfkill[0-9]/type | sed 's/type$/state/g')
1
1
cat $(grep -l bluetooth /sys/class/rfkill/rfkill[0-9]/type | sed 's/type$/state/g')
1
0
Это всё выводы содержимого и состояний, в которых пропущена команда разблокировщика bluetooth:
# grep -l bluetooth /sys/class/rfkill/rfkill[0-9]/type | sed 's/type$/state/g' | while read line; do echo 1 > $line; done
Как она работает?
Команда
grep -l bluetooth /sys/class/rfkill/rfkill[0-9]/type
в указанных вариантах пути, содержащих различные типы
# grep . /sys/class/rfkill/rfkill[0-9]/type
/sys/class/rfkill/rfkill0/type:wlan
/sys/class/rfkill/rfkill1/type:bluetooth
/sys/class/rfkill/rfkill3/type:wlan
/sys/class/rfkill/rfkill4/type:bluetooth
ищет тип bluetooth.
Следующая команда sed через пайп, в полученном пути, меняет имя файла с type на имя state, который содержит состояние интерфейса (0 или 1, - заблокировано или разблокировано соотвественно):
sed 's/type$/state/g'
Следующая в команде через пайп, процедура while-do-done, преобразованные sed в /sys/.../type, извлекает строки пути из полученного списка путей и пересылает в каждый из них единицу, разблокируя интерфейс bluetooth:
while read line; do echo 1 > $line; done
Финальная команда разблокировки bluetooth будет выглядеть как:
# grep -l bluetooth /sys/class/rfkill/rfkill[0-9]/type | sed 's/type$/state/g' | while read line; do echo 1 > $line; done
Эти команды аналогичны:
# rfkill --output ID,TYPE
ID TYPE
0 wlan
1 bluetooth
3 wlan
4 bluetooth
# grep -H . /sys/class/rfkill/rfkill[0-9]/type
/sys/class/rfkill/rfkill0/type:wlan
/sys/class/rfkill/rfkill1/type:bluetooth
/sys/class/rfkill/rfkill3/type:wlan
/sys/class/rfkill/rfkill4/type:bluetooth
Таким образом, формат команды блокировки|разблокировки беспроводных интерфейсов, выглядит как (смотри EXAMPLES в man rfkill):
# rfkill block|unblock ID|TYPE|all
Соответственно команде разблокировки всех беспроводных интерфейсов,
# rfkill list
0: ideapad_wlan: Wireless LAN
Soft blocked: yes
Hard blocked: no
1: ideapad_bluetooth: Bluetooth
Soft blocked: yes
Hard blocked: no
3: phy0: Wireless LAN
Soft blocked: yes
Hard blocked: no
4: hci0: Bluetooth
Soft blocked: yes
Hard blocked: no
# rfkill unblock all
# rfkill list
0: ideapad_wlan: Wireless LAN
Soft blocked: no
Hard blocked: no
1: ideapad_bluetooth: Bluetooth
Soft blocked: no
Hard blocked: no
3: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
4: hci0: Bluetooth
Soft blocked: no
Hard blocked: no
соответствует команда
# rfkill list
0: ideapad_wlan: Wireless LAN
Soft blocked: yes
Hard blocked: no
1: ideapad_bluetooth: Bluetooth
Soft blocked: yes
Hard blocked: no
3: phy0: Wireless LAN
Soft blocked: yes
Hard blocked: no
4: hci0: Bluetooth
Soft blocked: yes
Hard blocked: no
# ls -1 /sys/class/rfkill/rfkill[0-9]/state | while read line; do echo 1 > $line; done
# rfkill list
0: ideapad_wlan: Wireless LAN
Soft blocked: no
Hard blocked: no
1: ideapad_bluetooth: Bluetooth
Soft blocked: no
Hard blocked: no
3: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
4: hci0: Bluetooth
Soft blocked: no
Hard blocked: no
Или соответствие команд разблокировки только bluetooth
# rfkill --output ID,TYPE
ID TYPE
0 wlan
1 bluetooth
3 wlan
4 bluetooth
# rfkill unblock bluetooth
# grep -l bluetooth /sys/class/rfkill/rfkill[0-9]/type | sed 's/type$/state/g' | while read line; do echo 1 > $line; done
приведёт к одному и тому же результату
# rfkill list all
0: ideapad_wlan: Wireless LAN
Soft blocked: no
Hard blocked: no
1: ideapad_bluetooth: Bluetooth
Soft blocked: yes
Hard blocked: no
3: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
4: hci0: Bluetooth
Soft blocked: yes
Hard blocked: no
# grep -l bluetooth /sys/class/rfkill/rfkill[0-9]/type | sed 's/type$/state/g' | while read line; do echo 1 > $line; done
к разблокировке bluetooth
# rfkill list all
0: ideapad_wlan: Wireless LAN
Soft blocked: no
Hard blocked: no
1: ideapad_bluetooth: Bluetooth
Soft blocked: no
Hard blocked: no
3: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
4: hci0: Bluetooth
Soft blocked: no
Hard blocked: no