構成ファイル '/ dev / fd / 63'を開けませんでした、エラー:wpa_supplicantにそのようなファイルまたはディレクトリはありません


12

私がこれをするとき:

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'

何か案は?

回答:


14

ArchLinux wikiの引用:

注:プロセス置換のため、このコマンドをsudoで実行することはできません。ルートシェルが必要になります。

su -c以下のsudoように使用できるはずです:

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

11

プロセス置換 <(…)はパイプを作成し、パイプを使用/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からシェルを実行し、そこにプロセス置換を置きます。コマンドに特殊文字が含まれている場合は、引用に注意してください。

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

1

ウェブ検索エンジンから来る人のために:あなた/devがマウントされていることを確認してください。chrootするときに簡単に間違えると、このようなエラーが発生します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.