我建议在http://brainstorm.ubuntu.com/idea/27164/,但它被标记为已实施。有人能解释一下我该怎么做吗?我想要面板上特定连接(vpn 或宽带)的快捷方式(一键连接)。
答案1
您应该能够创建调用的快捷方式命令行建立连接:
nmcli con up id “您的连接名称”
这是我在系统终端中运行该程序的结果:
% nmcli con up id "PPTP VPN Testing"
Active connection state: activating
Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/2
state: VPN connecting (3)
state: VPN connecting (getting IP configuration) (4)
Connection activated
答案2
NetworkManager 具有 D-Bus 接口,您可以在其他程序或脚本中使用它。
例如,我使用以下命令设法连接我的一个网络管理器的 VPN 连接:
qdbus --system \
org.freedesktop.NetworkManager \
/org/freedesktop/NetworkManager \
org.freedesktop.NetworkManager.ActivateConnection \ #-- this is a method
org.freedesktop.NetworkManagerUserSettings \ #-- arg 1
/org/freedesktop/NetworkManagerSettings/4 \ #-- arg 2
/org/freedesktop/NetworkManager/Devices/1 \ #-- arg 3
/ #-- dumb arg 4 (needed for wifi only)
您可以使用软件包qdbusviewer
中的工具浏览您的 D-Bus 基础架构qt4-dev-tools
。仅限 CLI 的qdbus
来自libqt4-dbus
。
NetworkManager 的 D-Bus API 已记录这里。
当您找到所需的参数(连接号、设备号等)时,您可以将这些行保存为 shell 脚本并在面板上创建启动器以快速访问它。
我个人不太在意,只需额外点击两次即可。毕竟,我并不会经常连接 VPN,因此不会因此而受苦。
答案3
为了方便起见,我使用 cnetworkmanager 和这个 python 脚本。该脚本首先启动 LAN 连接,然后打开 VPN。
#!/usr/bin/env python
import subprocess
import time
import sys
def getConnectionState():
"""Returns 'CONNECTED' or 'DISCONNECTED'
"""
p = subprocess.Popen("cnetworkmanager --state", shell=True, stdout=subprocess.PIPE)
stdout = p.communicate()
result = stdout[0].split('\n')[0]
return result
def isConnected():
return getConnectionState() == 'CONNECTED'
def connectEthernet(name='myethernet'):
p = subprocess.Popen("cnetworkmanager --activate-connection=user,%s,," % name, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
def connectVPN(name='myvpn'):
p = subprocess.Popen("cnetworkmanager --activate-connection=user,%s,eth0," % name, shell=True)
def timeout():
while True:
time.sleep(0.2)
if isConnected():
break
connectEthernet()
timeout()
connectVPN(sys.argv[1])