Val*_*Val 15 wifi wpa-supplicant wpa
我的wpa_supplicant
程序有问题。
我的问题是关于使用wpa_cli
哪个需要wpa_supplicant
。我执行时出错sudo wpa_cli
:
Could not connect to wpa_supplicant
Run Code Online (Sandbox Code Playgroud)
的手动启动wpa_supplicant
给了我一些错误:
sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
rfkill: Cannot open RFKILL control device
ioctl[SIOCSIWAP]: Operation not permitted
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
wlan0: CTRL-EVENT-DISCONNECTED bssid=00:00:00:00:00:00 reason=0 ### NEW!!!
Run Code Online (Sandbox Code Playgroud)
配置dhcp
## /etc/dhcp/dhcpd.conf
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.2 192.168.2.9;
option domain-name-servers 192.168.1.1;
option domain-name "home";
option routers 192.168.2.1;
}
Run Code Online (Sandbox Code Playgroud)
配置wpa_supplicant
## /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
# network={
# ssid="__SSID__"
# key_mgmt=WPA-PSK
# psk="__PASS__"
# id_str="home"
# }
Run Code Online (Sandbox Code Playgroud)
配置hostapd
## /etc/hostapd/hostapd.conf
interface=wlan0
driver=rtl871xdrv
ieee80211n=1
ssid=__SSID__
hw_mode=g
channel=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=__PASS__
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
# EDIT
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
Run Code Online (Sandbox Code Playgroud)
ifconfig
/的结果iwconfig
wlan0 Link encap:Ethernet HWaddr c0:4a:00:17:40:fd
inet adr:192.168.2.1 Bcast:192.168.2.255 Masque:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
wlan0 IEEE 802.11bgn ESSID:"__SSID__" Nickname:"<WIFI@REALTEK>"
Mode:Master Frequency:2.412 GHz Access Point: C0:4A:00:17:40:FD
Sensitivity:0/0
Retry:off RTS thr:off Fragment thr:off
Power Management:off
Link Quality=100/100 Signal level=0 dBm Noise level=0 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
Run Code Online (Sandbox Code Playgroud)
我怎样才能在wpa_supplicant
没有错误的情况下开始并wpa_cli
连接?
wpa_supplicant
产生的错误不一定与您的wpa_cli
连接问题有关。这里的问题wpa_cli
是无法与wpa_supplicant
-无法打开控制套接字建立连接。这可能有多种原因:
运行的用户wpa_cli
无法访问给定的套接字,例如wpa_supplicant.conf
:
ctrl_interface=DIR=/var/run/wpa_supplicant
Run Code Online (Sandbox Code Playgroud)
您需要检查在该目录下wpa_cli
运行的用户是否可以访问该目录中的文件。这意味着不仅仅是套接字rw
- 以上所有目录都必须至少是x
,最后一个也可能是r
这样wpa_clie
可以列出所有可用的套接字。
与 不同wpa_supplicant
,wpa_cli
DBus 不支持。确保wpa_supplicant
不是仅通过 DBus 收听。从您的配置文件来看,这可能不是您的情况。
wpa_supplicant
没有运行(根据下面的评论)。这表明,由wpa_supplicant
它发出的错误消息和无法连接到它的错误消息之间确实可能存在连接。为了确保以详细模式(-d
甚至-dd
)运行它而不是守护进程(这是默认设置 - 只需确保您没有使用该-B
选项)。您还可以注意控制插座,例如:
watch -n 0.1 "ls -al /var/run/wpa_supplicant"
Run Code Online (Sandbox Code Playgroud)
请记住,这些命令中的大多数都需要以 root 权限运行,因此对于调试来说,su - root
永久而不是在每个命令前添加前缀可能更容易sudo
。
最后,写入的错误没有影响系统。
我的/etc/network/interfaces
文件看起来像(只有 wlan 部分):
iface wlan0 inet static
address 192.168.2.1
netmask 255.255.255.0
pre-up wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B
Run Code Online (Sandbox Code Playgroud)
有了这个配置,我可以毫无错误地使用sudo wpa_cli
命令!
无论如何都要
感谢彼得:) !