Та же проблема при установке VirtualBox 5.1.6 на текущую версию Slackware. VirtualBox 5.1 требует qt5, которому, как оказалось, нужен пакет libxkbcommon (который я не устанавливал). После получения этого пакета из slackbuilds.org VirtualBox запустился нормально.
Опираясь на ответ Джоша , я буду использовать глобус оболочки для идентификации каталогов /sys/class/net
с каталогом wireless
внутри и cut
для получения имени устройства:
# find the directories
$ printf '%s\n' /sys/class/net/*/wireless # substitute with phy80211 if desired
/sys/class/net/wlp4s0/wireless
# filter out the "device" part
$ printf '%s\n' /sys/class/net/*/wireless | cut -d/ -f5
wlp4s0
Универсальный способ (без полномочий root )протестирован на Android 4, Android 7.1 и Android 9 и ArchLinux.
ls /sys/class/ieee80211/*/device/net/
Вот небольшая функция bash, которую я написал, чтобы покрыть больше исключений:
lswifiInterfaces () {
set -o pipefail # I use this to preserve the return code of the first command in the pipe
if \ls /sys/class/ieee80211/*/device/net 2> /dev/null; then
:
elif \ls -d /sys/class/net/*/wireless 2> /dev/null | awk -F/ '{print$5}'; then
:
fi
set +o pipefail
}
Вот простой и очень эффективный цикл, который отвечает на вопрос:
for dev in /sys/class/net/*; do
[ -e "$dev"/wireless ] && echo ${dev##*/}
done
Этот выбирает первый беспроводной интерфейс и сохраняет его в $iwdev
, что мне и было нужно:
for dev in /sys/class/net/*; do
if [ -e "$dev"/wireless ]; then
iwdev=${dev##*/};
break;
fi
done
Это переписанный ответ Джоша , который я нашел красивым и простым. Приведенный выше подход обрабатывает пробелы и другие странности в именах файлов. Он также не делает слишком много предположений о правильности путей к файлам и полагается на минимум косых черт и индексации. Наконец, он использует встроенный -в параметр расширения для извлечения имени базового устройства вместо порождения подоболочки для cut
или awk
.