无法打开配置文件“/dev/fd/63”,错误:没有 wpa_supplicant 的此类文件或目录

无法打开配置文件“/dev/fd/63”,错误:没有 wpa_supplicant 的此类文件或目录

当我这样做时:

sudo wpa_supplicant -D nl80211,wext -i wlp4s0 -c <(wpa_passphrase "some ssid" "password")

我明白了

Successfully initialized wpa_supplicant
Failed to open config file '/dev/fd/63', error: No such file or directory
Failed to read or parse configuration '/dev/fd/63'

有任何想法吗?

答案1

工艺替代 <(…)创建一个管道,用于/dev/fd给出与管道所在的文件描述符等效的路径,并将文件名作为参数传递给程序。这里的程序是sudo,它将该参数(就其而言只是一个字符串)传递给wpa_supplicant,后者将其视为文件名。

问题是 sudo 关闭除标准文件描述符(stdin=0、stdout=1 和 stderr=2)之外的所有文件描述符。进程替换的管道位于另一个描述符上,该描述符已关闭,因此当wpa_supplicant尝试打开它时,它会发现一个不存在的文件。

如果您的 sudo 策略允许(closefrom_override启用选项),您可以告诉它不要关闭文件描述符。但通常情况并非如此。

sudo -C 64 wpa_supplicant … -c <(wpa_passphrase …)

或者,由于您没有使用标准输入,因此将数据传递到那里。

wpa_passphrase … | sudo wpa_supplicant … -c /dev/stdin

或者,从 sudo 运行 shell 并将进程替换放在那里。如果命令包含特殊字符,请小心引用。

sudo bash -c 'wpa_supplication … -c <(wpa_passphrase …)'

答案2

引用ArchLinux 维基:

注意:由于进程替换,您无法使用 sudo 运行此命令 - 您将需要 root shell。

您应该能够su -csudo这样使用:

$ sudo su -c 'wpa_supplicant -D nl80211,wext -i wlp4s0 -c \
    <(wpa_passphrase "some ssid" "password")'

答案3

对于那些来自网络搜索引擎的用户:请确保您的搜索引擎/dev已安装。 chroot 时很容易犯的错误,这可能会导致诸如此类的错误。

相关内容