Ограниченный или никакое уведомление о возможности соединения в Единице для 16,04

Я действительно испытываю затруднения из-за отсутствия этой функции на Единице для 16,04. Если WiFi активен на уровне маршрутизатора, но когда нет никакого доступа в Интернет (мой ISP время от времени перестал работать), нет никакого способа, которым я могу знать об этом в Единице для 16,04. Даже перенесенный Windows 7 2009 уведомляет, если нет "никакого доступа в Интернет".

Есть ли какой-либо другой файловый менеджер или DE, который я могу использовать? Или, какая-либо модификация, доступная для 16,04 единиц?Спасибо.

0
задан 4 November 2016 в 02:34

2 ответа

Самый простой способ - использовать ping -c4 google.com для проверки вашего интернет-соединения. Если он может выйти за пределы вашего маршрутизатора на любой URL, то у вас есть доступ в Интернет. Это можно легко адаптировать к сценарию, который периодически проверяет выбранный вами сайт. Но у меня немного другая идея.

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

Сохраните это как файл, убедитесь, что у него есть права на выполнение с помощью chmod +x interwebs-indicator (из терминала) или через контекстное меню в диспетчере файлов. Запустите вручную в терминале как

python3 intwerwebs-indicator

или

./interwebs-indicator

, если дали ему права на выполнение.

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

Простой и удобный в использовании.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

#
# Author: Serg Kolo , contact: 1047481448@qq.com
# Date: November 3rd, 2016
# Purpose: appindicator for testing internet connection
# Tested on: Ubuntu 16.04 LTS
#
#
# Licensed under The MIT License (MIT).
# See included LICENSE file or the notice below.
#
# Copyright © 2016 Sergiy Kolodyazhnyy
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
import gi
gi.require_version('AppIndicator3', '0.1')
gi.require_version('Notify', '0.7')
from gi.repository import GLib as glib
from gi.repository import AppIndicator3 as appindicator
from gi.repository import Gtk as gtk
from gi.repository import Gio
from gi.repository import Gdk
import urllib.request as urllib2

class InterwebsIdicator(object):

    def __init__(self):
        self.app = appindicator.Indicator.new(
            'interwebs-indicator', "gtk-network",
            appindicator.IndicatorCategory.HARDWARE
        )

        self.app.set_attention_icon('dialog-warning')
        #self.app.set_status(appindicator.IndicatorStatus.ACTIVE)
        self.make_menu()
        self.update()

    def add_menu_item(self, menu_obj, item_type, image, label, action, args):
        """ dynamic function that can add menu items depending on
            the item type and other arguments"""
        menu_item, icon = None, None
        if item_type is gtk.ImageMenuItem and label:
            menu_item = gtk.ImageMenuItem.new_with_label(label)
            menu_item.set_always_show_image(True)
            if '/' in image:
                icon = gtk.Image.new_from_file(image)
            else:
                icon = gtk.Image.new_from_icon_name(image, 48)
            menu_item.set_image(icon)
        elif item_type is gtk.ImageMenuItem and not label:
            menu_item = gtk.ImageMenuItem()
            menu_item.set_always_show_image(True)
            if '/' in image:
                icon = gtk.Image.new_from_file(image)
            else:
                icon = gtk.Image.new_from_icon_name(image, 16)
            menu_item.set_image(icon)
        elif item_type is gtk.MenuItem:
            menu_item = gtk.MenuItem(label)
        elif item_type is gtk.SeparatorMenuItem:
            menu_item = gtk.SeparatorMenuItem()
        if action:
            menu_item.connect('activate', action, *args)

        menu_obj.append(menu_item)
        menu_item.show()


    def add_submenu(self,top_menu,label):
        menuitem = gtk.MenuItem(label)
        submenu = gtk.Menu()
        menuitem.set_submenu(submenu)
        top_menu.append(menuitem)
        menuitem.show()
        return submenu

    def make_menu(self):

        self.app_menu = gtk.Menu()
        self.add_menu_item(self.app_menu,gtk.ImageMenuItem,'exit','quit',self.quit,[None])
        self.app.set_menu(self.app_menu)

    def check_connection(self,*args):
        try:
            url = urllib2.urlopen('http://google.com')
            page = url.read()
        except urllib2.HTTPError:
            print('>>> err:')
            self.app.set_status(appindicator.IndicatorStatus.ATTENTION)
            #self.app.attention-icon('network-error')
        except Exception as e:
            print('>>> exception:',e)
        else:
            print('>>> OK')

            self.app.set_status(appindicator.IndicatorStatus.ACTIVE)
            self.app.set_icon('network')


    def callback(self,*args):

        timeout = 5
        glib.timeout_add_seconds(timeout, self.update)

    def update(self,*args):
        self.check_connection() 
        self.callback()
# General purpose functions 


    def quit(self,*args):
        gtk.main_quit()


    def run(self):
        """ Launches the indicator """
        try:
            gtk.main()
        except KeyboardInterrupt:
            pass

    def quit(self, *args):
        """ closes indicator """
        gtk.main_quit()


def main():
    """ defines program entry point """
    indicator = InterwebsIdicator()
    indicator.run()

if __name__ == '__main__':
  try:
    main()
  except  KeyboardInterrupt:
    gtk.main_quit()
2
ответ дан 28 September 2019 в 06:21

Кажется, есть хорошие сценарии, простые и более сложные в ответах на аналогичный вопрос в unix stackexchange .

Я бы лично использовал что-то вроде:

nc -zw1 google.com 80 || notify-send "SAD SAD SAD... There is no connection to google... Go outside and find a real world..."

. Это просто отправит уведомляющее сообщение, которое появится в менеджере уведомлений systray, если нет соединения с портом 80 на google.com , Использование имени, а не IP-адреса сервера Google также проверит разрешение DNS.

Вы можете добавить его в свой пользовательский cron как задание, чтобы проверять каждую минуту, например ...

0
ответ дан 28 September 2019 в 06:21

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

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