大约两个月前,我开始同时使用 Ubuntu 和 Windows。我慢慢地将我经常使用的所有程序都添加到 Ubuntu 中,这样我最终就能在 Ubuntu 上完成我在 Windows 机器上能做的所有事情。
我需要迁移的最后一项是 Popcorn Time。我终于在 Ubuntu 上安装了该应用程序,也终于安装了 VPNAutoConnect。然而,在 Windows 上,我设置了一个额外的预防措施:单击 Popcorn Time 图标时会弹出一个消息框,询问 VPN 是否已连接。如果单击“是”,则应用程序将执行。如果单击“否”,它会询问用户是否知道什么是 VPN,然后要求他们连接它或离开我的电脑(这很有用,因为我的室友和女朋友有时会在我不在家时看电影,所以这是一个额外的安全措施,以确保他们检查)。
我想在 Ubuntu 中创建相同的消息框。这是我在 Windows 中使用的脚本:
returnvalue=msgbox("Is the VPN connected?",4,"VPN Authentification")
If returnvalue=6 Then
Dim objShell
Set objShell = WScript.CreateObject( "WScript.Shell" )
objShell.Run("""C:\Users\*********\Downloads\Popcorn-Time\Popcorn-Time.exe""")
Set objShell = Nothing
Else If returnvalue=7 Then
returnvalue=msgbox("Do you know what the VPN is?",4,"VPN Authentification")
If returnvalue=6 Then
x=msgbox("Please connect to the VPN",0,"VPN Authentification")
Else If returnvalue=7 Then
x=msgbox("Please get off my computer",0,"VPN Authentification")
End if
End if
End if
End if
我该如何在 Ubuntu 中创建相同类型的脚本?
答案1
一种方法是使用 Zenity。例如:
#!/usr/bin/env bash
if zenity --question --text="What do you choose?"; then
zenity --info --text="You pressed \"Yes\"!"
else
zenity --info --text="You pressed \"No\"!"
fi
答案2
我也在 Reddit 上回答过你,但是这更简单。
我的做法是检查ifconfig
命令的输出是否存在tun
或tap
接口。最有可能的是,当您连接到 VPN 时会创建其中一个。
#!/usr/bin/env bash
if ifconfig -s | grep -qE "(tun|tap)[0-9]+"; then
# Run popcorn time
else
zenity --error --text "VPN is not running."
fi
ifconfig
用于配置网络接口。如果不提供任何参数,它将返回所有可用的网络接口以及有关它们的大量信息。该-s
标志使其仅输出一小部分接口列表。ifconfig -s
连接到 VPN 时,我的显示如下:
➜ ~ ifconfig -s
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 5302413 0 0 0 1971869 0 0 0 BMRU
lo 65536 0 323789 0 0 0 323789 0 0 0 LRU
tun0 1500 0 0 0 0 0 15 0 0 0 MOPRU
如您所见,最后一行有一个名为“tun0”的接口,这是我的 VPN 连接使用的接口。由于它在那里,我知道我已连接到我的 VPN。如果您想了解有关 ifconfig 的更多信息,请参阅man ifconfig
。
管道|
符“将第一个命令的输出通过管道发送到第二个命令中 - grep
。
该grep
命令在输入文本中搜索与模式匹配的任何内容。-E
标志告诉它该模式是一个“扩展正则表达式”。这有点难以解释,但如果你好奇,你可以阅读man grep
。我提供的模式(tun|tap)[0-9]+
将搜索以“tun”或“tap”开头,后跟至少一个数字的字符串。标志-q
告诉 grep,我不希望它输出它找到的实际文本,我只是想知道它是否找到了某些东西。
将其放入if
语句中,如果找到匹配的字符串,则条件为真grep
,因此then
将运行子句中的代码。如果找不到匹配的字符串,else
则将运行子句中的代码。
以 开头的行#
是注释 - 代码将被忽略且不会运行。由于我不知道 Popcorn Time 安装在哪里,所以我不知道如何运行它,所以您必须自己填写。
第一行,以 开头,#!
称为“shebang”。该行只是告诉您的 shell(您用来运行脚本的东西)应该使用哪个程序来执行脚本。在本例中,我们可能希望它使用bash
。
评论中有人建议你查看route
命令的输出,这可能很好,但我尝试时速度很慢。如果你有多个 VPN 连接,并且想要检查某个特定的连接是否正常,那么该route
命令会更好(因为你可以查找特定的 IP 地址),但对于简单的用例,我认为没有必要。
答案3
您可能需要使用xmessage
例如:xmessage -center -buttons yes,no Are you connected to the VPN?
示例脚本:
#!/bin/bash
xmessage -center -buttons yes,no Are you connected to the VPN?
ans="$?"
if [[ "$ans" == 101 ]]; then
#command to connect to VPN
notify-send "Connecting"
else
notify-send "Not Connecting"
fi