我有 3 个 odroid wifi模块 4USB 加密狗(RT5572N 芯片组),由于各种原因,我需要可互换。
我使用一个设置了所有东西,连接到几个 wifi 网络,一切正常。我可以拔出并放回加密狗,它会自动重新连接(我使用的是 Ubuntu wily)。所以一切都很好。
有趣的是,如果我插入其他设备之一,它拒绝自动连接。我必须手动使用 nmcli 连接到 wifi 网络,然后自动连接才能正常工作。
因此,WiFi 网络似乎以某种方式与适配器的 MAC 地址绑定。我如何从一个加密狗复制我的设置并确保所有其他加密狗都能正常工作?
答案1
wifi 连接信息存储在 中/etc/NetworkManager/system-connections
。您可以添加一个新的(查看现有连接时语法就很清楚了)并重新启动网络管理器,它就会出现。我们可以通过复制旧连接并更改 uuid 和 MAC 地址来创建一个新的连接。
因此,以 root 身份运行,将以下内容输入到copyconnection.sh
:
#!/bin/bash
if (( $# < 1 )); then
exit 1
fi
# Parameter is the profile to copy
ORIG_PROFILE=$1
# Get the MAC address of wlan0
NEW_MAC=`ethtool -P wlan0 | cut -d " " -f 3 | tr [a-f] [A-F]`
# Copy the profile
SUFFIX=`mktemp -u XXXXXX`
NEW_PROFILE="${ORIG_PROFILE}.${SUFFIX}"
echo "Creating $NEW_PROFILE from $ORIG_PROFILE"
cp "$ORIG_PROFILE" "$NEW_PROFILE"
# We will need a new UUID line and a new MAC address line
NEW_UUID=`uuidgen`
NEW_UUID_LINE="uuid=$NEW_UUID"
NEW_MAC_LINE="mac-address=$NEW_MAC"
# Drop the lines in
sed -i "s/^uuid=.*$/$NEW_UUID_LINE/" "$NEW_PROFILE"
sed -i "s/^mac-address=.*$/$NEW_MAC_LINE/" "$NEW_PROFILE"
使其可执行
chmod +x copyconnection.sh
然后运行它,使用您的旧配置文件作为参数
./copyconnection.sh /etc/NetworkManager/system-connections/MyHomeWifi
如果你想做很多事情:
find /etc/NetworkManager/system-connections/ -type f -exec copyconnection.sh {} \;
最后,重新启动网络管理器:
service network-manager restart
您就完成了。
全面披露:
- 我无法测试这一点,因为我手边没有外部 wifi 适配器。我测试过一个非常类似的东西,为我唯一的 wifi 适配器添加一个新的配置文件,而且成功了。
- 的使用
mktemp
很不妥。可以想象,它可能会出错并产生重复文件。它不会出错,但可能会出错。更简洁的方法是将其设置tmpdir
为原始文件的位置,但它会使脚本变得非常混乱,我认为最好只是即兴发挥 :-)