Я начал использовать 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?
Я ответил Вам в 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-адрес), но для простого примера использования, я не думаю, что это необходимо.
Один подход должен был бы использовать 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
Необходимо будет, вероятно, использовать 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