帮助在应用程序运行之前创建带有“是/否”选项的消息框通知

帮助在应用程序运行之前创建带有“是/否”选项的消息框通知

大约两个月前,我开始同时使用 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命令的输出是否存在tuntap接口。最有可能的是,当您连接到 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

相关内容