Ubuntu Launcher Toggle

Я хочу создать «переключатель», чтобы включить мой Unity Launcher для запуска или остановки моей настройки OpenVPN.

В основном я ищу значок, который мог бы либо

    sudo /etc/init.d/openvpn start

или

    sudo /etc/init.d/openvpn stop

(либо путем выбора одного варианта или другого, либо путем переключения, когда я щелкаю по нему).

Я нахожусь в процессе перехода на Linux после десятилетнего использования Mac, пожалуйста, будьте проще, потому что мой мозг мог сгнить. Я знаю, что это возможно, потому что я видел это на машине бывшего коллеги.

Вывод из маршрута, когда я не подключен через VPN:

  Kernel IP routing table
  Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
  default         192.168.111.1   0.0.0.0         UG    0      0        0 wlan0
  192.168.111.0   *               255.255.255.0   U     9      0        0 wlan0

Вывод, когда я подключен через VPN

  Kernel IP routing table
  Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
  default         10.8.0.101      128.0.0.0       UG    0      0        0 tun0
  default         192.168.111.1   0.0.0.0         UG    0      0        0 wlan0
  10.8.0.1        10.8.0.101      255.255.255.255 UGH   0      0        0 tun0
  10.8.0.101      *               255.255.255.255 UH    0      0        0 tun0
  <OpenVPNserver>.net 192.168.111.1   255.255.255.255 UGH   0      0        0 wlan0
  128.0.0.0       10.8.0.101      128.0.0.0       UG    0      0        0 tun0
  192.168.111.0   *               255.255.255.0   U     9      0        0 wlan0
2
задан 19 April 2014 в 16:33

1 ответ

Вот сценарий переключателя, описание, как настроить, два файла на рабочем столе и их соответствующие значки. Хотя ответ немного обширен, это просто для установки.

Как это работает

При нажатии на значок в средстве запуска сценарий ищет, если соединение VPN закончилось или вниз. В любом случае это переключается на другую опцию, и значок в средстве запуска будет заменен соответственно. После 10 секунд сценарий проверяет, было ли соединение на самом деле установлено. В противном случае это возвращает значок к корректному. Можно измениться, это "приводит к таймауту" набора в headsection сценария (wait = 10). (не касайтесь других определений, если Вы не знаете то, что Вы делаете),

enter image description here enter image description here

Несколько комментариев:

  • Первый и самый важный из всех: запущение скрипта, который просит полномочия администратора из локального каталога, является потенциальной угрозой безопасности по определению. Вы не проверите код своего сценария каждый раз, Вы выполняете его, и если бы кто-то со злонамеренными намерениями смог бы изменить код, что-либо могло бы произойти. Я предложил бы запустить скрипт от безопасного места, если Вы имеете (или должен иметь), любые сомнения на том, кто делает что на Вашем компьютере.
  • Для создания это более гладкий в качестве взаимодействует через интерфейс, я использовал gksu в командах Вы, если, вместо sudo. gksu не установлен по умолчанию, необходимо будет установить его.
  • Сценарий изучает то, что оболочка возвращает на команде "маршрут". Как идентификатор, я использовал <OpenVPNserver>, так как это было simpelest и самой очевидной строкой для поиска. Если установка использовалась бы для других типов соединений, это не будет достаточно.
  • Для замены значков в средстве запуска, согласно состоянию соединения, сценарий читает содержание текущего средства запуска. Если Вы используете 13.10 или 14.04, это должно быть прекрасным, но результат gsettings - "вызов" выглядит немного отличающимся на более старых версиях Ubuntu и не будет работать правильно.
  • Прежде чем документ на получение изменяет средство запуска, резервное копирование (сценарий) текущего средства запуска создается как /.restore_currentlauncher.sh. Хотя в годах я использовал его, мне никогда не был нужен он, хорошо иметь.

Как использовать:

Значки:

Щелкните правой кнопкой по значкам ниже и сохраните их как toggle_officon.png (белый) и toggle_onicon.png (зеленый).

enter image description here enter image description here

Сценарий: Скопируйте (весь) текст ниже, вставьте его в пустой файл и безопасный он как toggle_vpn.py

#!/usr/bin/python3

import subprocess
import getpass
import time

# time to wait, to check if connection was established (set correct icon)
wait = 10
# identifying difference on route command
running_id = "<OpenVPNserver>"
# location of the launcher restore script
backup_copy = "/home/"+getpass.getuser()+"/.restore_currentlauncher.sh"
# name of the desktop file if connection is down
mention_ifdown = 'application://VPN_off.desktop'
# name of the desktop file if connection is down
mention_ifup = 'application://VPN_on.desktop'


def check_ifrunning():
    # check if connection is up or down
    get_routeinfo = subprocess.Popen(["route"], stdout=subprocess.PIPE)
    output = (get_routeinfo.communicate()[0].decode("utf-8"))
    if running_id in output:
        return "running"
    else:
        return "not_running"

def read_currentlauncher():
    # read the current launcher contents
    get_launcheritems = subprocess.Popen([
        "gsettings",
        "get",
        "com.canonical.Unity.Launcher",
        "favorites"
        ], stdout=subprocess.PIPE)
    return eval((get_launcheritems.communicate()[0].decode("utf-8")))

def set_current_launcher(current_launcher):
    # before editing the launcher, create restore script
    backup_data = read_currentlauncher()
    with open(backup_copy, "wt") as create_backup:
        create_backup.write(
            "#!/bin/sh\n\n"\
            "gsettings set com.canonical.Unity.Launcher favorites "+\
            '"'+str(backup_data)+'"'
            )
    # preparing subprocess command string
    current_launcher = str(current_launcher).replace(", ", ",")
    subprocess.Popen([
        "gsettings",
        "set",
        "com.canonical.Unity.Launcher",
        "favorites",
        current_launcher,
        ]) 

def set_icon(change_mode):
    # defines the appropriate icon in the launcher
    state = check_ifrunning()
    if state == "running":
        if change_mode == "set_current":
            iconset = [mention_ifup, mention_ifdown]
        else:
            iconset = [mention_ifdown, mention_ifup]
    elif state == "not_running":
        if change_mode == "set_current":
            iconset = [mention_ifdown, mention_ifup]
        else:
            iconset = [mention_ifup, mention_ifdown]
    # set the defined icon
    current_launcher = read_currentlauncher()
    if iconset[0] in current_launcher:
        pass
    else:
        index = current_launcher.index(iconset[1])
        current_launcher.pop(index)
        set_current_launcher(current_launcher)
        time.sleep(1)
        current_launcher.insert(index, iconset[0])
        set_current_launcher(current_launcher)

def toggle_connection():
    set_icon("set_alter")
    runcheck = check_ifrunning()
    if runcheck == "not_running":
        subprocess.call(["gksu", "/etc/init.d/openvpn", "start"])
    else:
        subprocess.call(["gksu", "/etc/init.d/openvpn", "stop"])
    time.sleep(wait)
    set_icon("set_current")

toggle_connection()

Файлы на рабочем столе

VPN_off desktopfile: скопируйте текст ниже, введите соответствующие пути и к значку и к сценарию, сохраните его как VPN_off.desktop в ~/.local/share/applications

[Desktop Entry]
Name=VPN_off
Exec=python3 /path_to_script/toggle_vpn.py
Icon=/path_to_icon/toggle_officon.png
Terminal=false
Type=Application
NoDisplay=true

VPN_on desktopfile: скопируйте текст ниже, введите соответствующие пути и к значку и к сценарию, сохраните его как VPN_on.desktop в ~/.local/share/applications

[Desktop Entry]
Name=VPN_on
Exec=python3 /path_to_script/toggle_vpn.py
Icon=/path_to_icon/toggle_onicon.png
Terminal=false
Type=Application
NoDisplay=true

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

В случае, если Вы нуждаетесь в более определенной информации о деталях, оставляете комментарий.

1
ответ дан 19 April 2014 в 16:33

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

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