Помогите создать уведомление в окне сообщения с опциями да / нет до запуска приложения

Я начал использовать Ubuntu вместе с Windows около 2 месяцев назад. Я постепенно добавляю все программы, которые регулярно использую, в Ubuntu, чтобы в конечном итоге я смог сделать все, что смог, на своей машине с Windows.

Одна из последних вещей, по которой мне нужно перейти, - это время попкорна. Я наконец-то установил приложение в 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
задан 7 June 2014 в 23:38

3 ответа

Я ответил Вам в Reddit также, но это легче.

Путем я сделал бы это, должен проверить вывод ifconfig команда для существования a 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 флаг говорит этому, что шаблон является "расширенным regex". То, что это, немного слишком много для объяснения, но если Вам любопытно, можно читать man grep. Шаблон я предоставил, (tun|tap)[0-9]+ будет искать строку, которая запускается с "бочки", или "коснитесь", сопровождаемый по крайней мере одной цифрой. -q флаг говорит grep, что я не хочу, чтобы он произвел фактический текст, который он нашел, мне просто интересно знать, нашел ли он что-то или нет.

Вставляя, что if оператор, условие будет верно если grep находит соответствующую строку, таким образом, код в then пункт будет выполнен. Если этому не удается найти соответствующую строку, код в else пункт будет работать.

Строки, запускающиеся с # комментарии - код, который проигнорирован и не выполнен. Так как я не знаю, где Время Попкорна установлено, я не знаю, как выполнить его, таким образом, необходимо будет заполнить это в себе.

Первая строка, начиная с #! назван "хижиной". Та строка просто говорит Вашу оболочку (вещь, что Вы используете для запущения скрипта с), какую программу это должно использовать для выполнения сценария. В этом случае мы, вероятно, хотим, чтобы это использовало bash.


Кто-то в комментариях предложил, чтобы Вы посмотрели на вывод route команда, которая могла быть хорошей, но когда я попробовал ее, это было довольно медленно. Если у Вас было несколько соединений VPN, и Вы хотели проверить, что определенный произошел, то route команда была бы намного лучше (потому что Вы могли искать определенный IP-адрес), но для простого примера использования, я не думаю, что это необходимо.

1
ответ дан 7 June 2014 в 23:38

Один подход должен был бы использовать 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
3
ответ дан 7 June 2014 в 23:38

Необходимо будет, вероятно, использовать 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
1
ответ дан 7 June 2014 в 23:38

Другие вопросы по тегам:

Похожие вопросы: