How do I configure wpa_supplicant with default iPhone SSID?

2017-04-06 04:22:09

Newer iPhones will broadcast an SSID in hotspot mode as such:

My Name\342\\\200\\\231\\s iPhone

I observed this SSID in the GUI.

When I grab the SSID via the command line:

$ sudo iwlist wlan0 scan | grep ESSID

> My Name\xE52\x80\x99s iPhone

In the iPhone it shows up as:

My Name's iPhone

If, in wpa_supplicant.conf, I enter:

network={

ssid="My Name's iPhone"

psk="my_passcode"

}

The Raspberry Pi will not connect to the iPhone hotspot.

However, if, in wpa_supplicant.conf, I enter:

network={

ssid="My Name\342\\\200\\\231\s iPhone"

psk="my_passcode"

}

I get an error in the command line.

$ sudo ifdown wlan0

$ sudo ifup wlan0

> wpa_supplicant: /sbin/wpa_supplicant daemon failed to start

> run-parts: /etc/network/if-pre-up/wpasupplicant exited with return code 1

> Failed to bring up wlan0

Via GUI, I get the error "Invalid argument".

If, in wpa_supplicant.conf I enter:

network={

ssid="My Name\xE52\x80\x99s iPhone"

psk="my_passcode"

}

  • The iPhone prompt includes the Unicode character U+2019 "single right quotation mark". This is valid (if very inconvenient).

    It is easy enough to include Unicode characters in strings. The following would echo this at the bash command prompt.

    echo $'My Name\u2019s iPhone'

    echo $'My Name\xE2\x80\x99s iPhone'

    The (very sketchy) documentation of man wpa_supplicant.conf does not seem to specify how the ssid parameter is interpreted.

    You could try the form above $'My Name\u2019s iPhone' and see if that helps.

    NOTE The string "My Name\xE52\x80\x99s iPhone" in your question is not valid Unicode (there is an excess character 5) but this MAY work if you correct it.

    2017-04-06 04:39:49
  • I had a look into how wpa_supplicant parses the configuration file, and it seems like it extracts the exact bytes between ssid=" and the last ".

    Escaped unicode (\u) and escaped non-ascii characters (\x) will not work.

    In your case, you would have to specify your SSID like this:

    ssid="My Name’s iPhone"

    Which would look like this in a hex editor:

    09 73 73 69 64 3D 22 4D 79 20 4E 61 6D 65 E2 80 99 73 20 69 50 68 6F 6E 65 22

    If you're using the output from iw (which escapes non-ascii characters), you can use Python to interpret and write the exact bytes to a file:

    $ python

    >>> ssid = 'My Name\xE5\x80\x99s iPhone'

    >>> file = open('ssid', 'w')

    >>> file.write(ssid)

    >>> file.close()

    Note that if you want to connect to an access point with the SSID A so called "SSID" it will work to enter it like this: ssid="A so called "SSID"". This is because wpa_supplicant will look for the bytes between the first and the last quote on a line.

    One limitiation I found is that wpa_supplican

    2017-04-06 05:30:01
  • I just changed the iPhone name and it fixed everything.

    2017-04-06 05:57:07