Estou criando um aplicativo GUI que controlará meu laptop para que ele atue como um hotspot wifi. Posso alterar as distribuições, por isso quero encontrar uma solução que funcione geralmente para todas as distribuições. Atualmente, estou fazendo isso no Fedora 17.
O uso do botão "Usar como ponto de acesso" do NetworkManager funciona muito bem para criar um ponto de acesso ad-hoc:

Eu quero recriar essa funcionalidade com comandos de terminal.
Abaixo estão dois métodos que tentei fazer isso, mas ainda não encontrei uma solução.
Método 1: iwconfig
Usando pesquisas de toda a web, tentei o seguinte comando:
# ifconfig wlan0 10.42.0.1 netmask 255.555.255.0 broadcast 10.42.0.255 up
# iwconfig wlan0 essid my-lappy mode ad-hoc key 0123456789
# iptables-restore < saved-hotspot-iptables
# echo 1 > /proc/sys/net/ipv4/ip_forward
# dhclient wlan0
Onde saved-hotspot-iptablesestá um arquivo que eu gerei com iptables-save > saved-hotspot-iptableso iptables definido pela função "Use as Hotspot".
Método 1 Problema Os
dispositivos podem ver o SSID, mas não conseguem se conectar. A execução ip arevela o seguinte sobre o wlan0:
...
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state DORMANT qlen 1000
...
O aviso NO-CARRIERestá presente e o estado está em DORMANTvez de UP.
A execução ifconfig wlan0mostra o seguinte:
...
wlan0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
...
Observe que RUNNINGestá faltando como um dos sinalizadores.
Método 2: nmcli
Se o botão "Usar como ponto de acesso" do NetworkManager for pressionado pelo menos uma vez no sistema, ele /etc/sysconfig/network-scripts/ifcfg-Hotspotserá criado e eu posso usar o seguinte comando para iniciar um ponto de acesso em funcionamento:
# ifconfig wlan0 up
# nmcli con up id Hotspot
# iwconfig wlan0 essid my-lappy key 0123456789
Método 2 Problema
Se o usuário nunca pressionou "Usar como ponto de acesso" no NetworkManager antes, nmcli con up id Hotspotnão funcionará. Eu olhei, nm-connection-editor --createmas não consegui encontrar muita informação. Também procurei criar manualmente, /etc/sysconfig/network-scripts/ifcfg-Hotspotmas esse método não parece elegante nem extensível a outras distribuições.