我希望网络管理器每次连接到有线网络时都询问身份/用户名,我该如何实现?
我当前的配置是:
- 802.1x 安全:已启用
- 身份验证:受保护的 EAP (PEAP)
- CA 证书:[我的 CA 证书]
- PEAP 版本:自动
- 内部身份验证:MSCHAPv2
- 用户名: [我的用户名]
- 密码:每次都询问此密码
我在系统网络设置 GUI 中配置了这些选项,没有要求输入用户名的选项,我不能将其留空。当身份验证对话框弹出时,我也没有更改用户名的选项。
我尝试使用 nmcli 为 802-1x.identity 设置一个空值(“”),希望我可以将其配置为使用 --ask 选项询问用户名,或者允许我在身份验证窗口中修改用户名:
nmcli c modify <UUID> 802-1x.identity ""
失败并显示错误:缺少 802-1x.identity
我也试过
nmcli c modify <UUID> -802-1x.identity "anon"
命令成功了,但是好像什么也没做。
编辑:我创建了一个 GUI,其中只有一个用户名文本框,在后台运行 nmcli(它更像是一个“概念验证”,尚未完成)。不确定这是否是一个好主意,我希望有一个“干净”的解决方案,但目前这可能对我有用。
import wx
from os import system
from shlex import quote
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Authentication", style=wx.CAPTION | wx.CLOSE_BOX)
# Create UI elements
self.textboxSize = wx.Size(400, -1)
self.usernameCtrl = wx.TextCtrl(self, size=self.textboxSize)
self.connectButton = wx.Button(self, label="Connect")
# Create sizer and add UI elements
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(wx.StaticText(self, label="Username"), 0, wx.LEFT | wx.TOP, border=5)
self.sizer.Add(self.usernameCtrl, 0, wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT, border=5)
self.sizer.AddSpacer(5)
self.sizer.Add(self.connectButton, 0, wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT, border=5)
# Register button callback
self.connectButton.Bind(wx.EVT_BUTTON, self.on_connect)
self.connectButton.SetDefault()
# Show the frame
self.sizer.SetSizeHints(self)
self.SetSizer(self.sizer)
self.Show()
def on_connect(self, ce):
self.connectButton.Disable()
if self.usernameCtrl.GetValue() == "":
dlg = wx.MessageDialog(self, "Please enter your username", "Error", wx.OK | wx.ICON_ERROR | wx.CENTRE)
dlg.ShowModal()
self.connectButton.Enable()
return
system('nmcli c modify "MyNetwork" 802-1x.password-flags 2') # Make sure passwords aren't saved
system('nmcli c modify "MyNetwork" 802-1x.identity "{}"'.format(quote(self.usernameCtrl.GetValue()))) # Enter the username
system('nmcli c up "MyNetwork"') # Connect to network and ask for password
wx.CallAfter(self.Close)
return
if __name__ == '__main__':
app = wx.App()
frame = MyFrame()
app.MainLoop()