Кто то может подсказать, где в Москве можно разместить за адекватные деньги блейд HP C7000? 10 юнитов, а БП под 15 кВт суммарно 6 шт. ЦОДы предлагают брать стойку, но это 80-100 тр. - вообще не бюджетно. У меня самих лезвий то пока будет штук 5 из 16. Т.е. оно будет потреблять до 2 кВт.
Добрый день.
Есть в наличии один роутер раздающий выделенные ip напрямую и раздающий выделенные ip через nat
но с выделенных ip, которые разданы напрямую не видно выделенных ip, которые разданы через nat
с других роутеров, неважно по какому принципу выдан выделенный ip видно выделенные ip этого компьютера, которые разданы через nat
Выглядит примерно так, только другие ip:
[центральный роутер]все другие роутеры общаются через него
ifconfig eth0 100.100.1.1 255.255.255.0 up ; это основной ip центрального роутера через который работает роутер раздающий выделенные ip напрямую и раздающий выделенные ip через nat
route add -net 100.100.100.0/24 gw 100.100.1.2
route add -net 100.100.200.0/24 gw 100.100.1.2
[роутер, о котором идет речь]
ifconfig eth1 100.100.1.2 255.255.255.0 up ; это основной ip роутера раздающего выделенные ip напрямую и раздающего выделенные ip через nat
ifconfig eth1:1 100.100.100.1 255.255.255.0 up ; это подсеть выделенных ip раздаваемых через nat
ifconfig eth1:1 192.168.0.1 255.255.255.0 up ; это подсеть внутренних ip, на которые выделяются выделенные ip раздаваемые через nat
ifconfig eth1:1 100.100.200.1 255.255.255.0 up ; это подсеть выделенных ip раздаваемых напрямую
На роутере поднята подсеть выделенных ip раздаваемых через nat
ifconfig eth1:1 100.100.100.1 255.255.255.0 up
route -n | grep 100.100.100.0
100.100.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
На роутере прописаны правила SNAT и DNAT:
iptables -t nat -A POSTROUTING –source 192.168.0.5 -o eth1 -j SNAT –to-source 100.100.100.2
iptables -t nat -A PREROUTING -i eth1 –destination 100.100.100.2 -j DNAT –to-destination 192.168.0.5
…
при трассировке будет следующее
1ms 1ms 1ms 100.100.200.1 ; компьютер, которому выдан ip напряую обращается к роутеру
100.100.100.2 сообщает: заданный узел недоступен
Я так понимаю это из-за того что есть подсеть 100.100.100.1/24 в которой никого напрямую не видно а видно только через DNAT, в который трафик не заворачивается
При попытке обхитрить маршрутизацию и не использовать ifconfig eth1:1 100.100.100.1 255.255.255.0 up а потушить ifconfig eth1:1 down
при трассировке будет безконечный цикл поиска а при пинге превышен срок жизни ttl при передаче пакета:
1ms 1ms 1ms 100.100.200.1 ; компьютер, которому выдан ip напряую обращается к роутеру
1ms 1ms 1ms 100.100.1.1 ; его отсылает на центральный роутер
1ms 1ms 1ms 100.100.200.1 ; оттуда его отсылает обратно
1ms 1ms 1ms 100.100.1.1 ; его отсылает на центральный роутер
1ms 1ms 1ms 100.100.200.1 ; оттуда его отсылает обратно
…
С других роутеров компьютеры, которым выданы выделенные ip через nat видны при ifconfig eth1:1 down через dnat даже при отсутствии такой подсети при маршруте route add -net 100.100.100.0/24 gw 100.100.1.2 на центральном роутере
Остается только уводить компьютеры, которым выдаются выделенные ip через nat на отдельный роутер или все же есть способ сдружить все это вместе на одном роутере?
Купил с пылу с жару Ultrastar июньского производства (не SMR). Прогнал по одному проходу на каждый стандартный паттерн badblocks. Прогнал оба теста smartctl. Никаких ошибок, все ок. Создал один раздел на 95% свободного пространства, поверх накатил luks, отфарматировал в ext4. Дальше запустил rsync, чтобы скопировать данные со старого HDD, который меньше в 2 раза по объему. Через какое-то время (какое точно не знаю, т.к. запускал на ночь) вижу, что rsync зафейлился на 3 Tb. Ошибку не записал дословно, а зря. Было что-то вроде rsync не может копировать, потому что закончилось место на целевом диске. Дальше копаю логи. В dmesg такое
[Oct15 23:53] blk_update_request: I/O error, dev sda, sector 1053233152 op 0x1
WRITE) flags 0x4000 phys_seg 50 prio class 0
[ +0.000014] sd 0:0:0:0: [sda] Read Capacity(16) failed: Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[ +0.000002] sd 0:0:0:0: [sda] Sense not available.
[ +0.000011] EXT4-fs error (device dm-3): ext4_wait_block_bitmap:517: comm kworker/u64:4: Cannot read block bitmap - block_group = 4032, block_bitmap = 132120576
[ +0.000003] sd 0:0:0:0: [sda] tag#9 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[ +0.000004] sd 0:0:0:0: [sda] tag#9 CDB: Write(16) 8a 00 00 00 00 00 3e c7 08 00 00 00 08 00 00 00
[ +0.000002] sd 0:0:0:0: [sda] Read Capacity(10) failed: Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[ +0.000003] sd 0:0:0:0: [sda] Sense not available.
[ +0.000003] blk_update_request: I/O error, dev sda, sector 1053231104 op 0x1
WRITE) flags 0x4000 phys_seg 38 prio class 0
[ +0.000014] sd 0:0:0:0: [sda] 0 512-byte logical blocks: (0 B/0 B)
...
[ +0.000005] Buffer I/O error on device dm-3, logical block 131649373
[ +0.000006] Buffer I/O error on device dm-3, logical block 131649374
[ +0.000004] Buffer I/O error on device dm-3, logical block 131649375
[ +0.000007] Buffer I/O error on device dm-3, logical block 131649376
[ +0.000002] Buffer I/O error on device dm-3, logical block 131649377
[ +0.000002] Buffer I/O error on device dm-3, logical block 131649378
[ +0.000002] Buffer I/O error on device dm-3, logical block 131649379
[ +0.000002] Buffer I/O error on device dm-3, logical block 131649380
...
[ +0.000344] sd 0:0:0:0: [sda] tag#4 access beyond end of device
[ +0.000213] sd 0:0:0:0: [sda] tag#5 access beyond end of device
[ +0.000097] sd 0:0:0:0: [sda] tag#6 access beyond end of device
[ +0.000091] sd 0:0:0:0: [sda] tag#7 access beyond end of device
[ +0.000086] sd 0:0:0:0: [sda] tag#8 access beyond end of device
[ +0.000004] sd 0:0:0:0: [sda] tag#9 access beyond end of device
[ +0.000093] sd 0:0:0:0: [sda] tag#10 access beyond end of device
...
[ +0.000003] sd 0:0:0:0: [sda] tag#6 CDB: ATA command pass through(16) 85 06 2c 00 00 00 00 00 00 00 00 00 00 00 e5 00
[Oct16 06:36] sd 0:0:0:0: [sda] tag#18 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[ +0.000002] sd 0:0:0:0: [sda] tag#18 CDB: ATA command pass through(16) 85 06 20 00 00 00 00 00 00 00 00 00 00 00 e5 00
[Oct16 06:46] sd 0:0:0:0: [sda] tag#11 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[ +0.000002] sd 0:0:0:0: [sda] tag#11 CDB: ATA command pass through(16) 85 06 20 00 00 00 00 00 00 00 00 00 00 00 e5 00
[Oct16 06:56] sd 0:0:0:0: [sda] tag#19 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
Когда начал проверять все это обнаружил, что диска в системе нет. Он был /dev/sda. Подключен по sata3. Питания с запасом (блок на 650 Вт, суммарно около 300 Вт в пике). БП хороший - seasonic. Перебоев с электричеством не было. Остальные hdd/ssd в порядке. Менять порт пробовал.
Ошибки гуглил, нашел несколько тем, но ничего не понял. Ни причину, ни что делать. Нужен совет всемогущего ЛоРа.
(Извините не совсем в тему так как общий вопрос а не по linux, но в какой раздел форума лучше направить я не знаю так что может перенесут куда нужно)
Читая очередную статью что нужно отказываться от Hangouts и переходить на Chat я наткнулся на интересную новость.
https://blog.google/products/workspace/latest-google-hangouts-and-upgrade-google-chat
…
New telecommunications regulations are being introduced in the EU and U.S. beginning in 2021. To comply with these new regulations, we need to remove the call phones feature in Hangouts.
…
Я правильно понимаю что теперь всякие viber и т.д. идут лесом ?
Не могу вообще ничего установить ни с аура ни с обычных репозиториев, постоянно получаю эту ошибку:
gpg: сбой при получении с сервера ключей: Общая ошибка
проблема импортирования ключей
Видел эту тему: [РЕШЕНО +/-] Manjaro и обновления - неверный или поврежденный пакет (PGP-подпись) (комментарий)
Но оба решения не помогли
Захотел я использовать программу MC Extractor https://github.com/platomav/MCExtractor для анализа списка CPU в прошивке BIOS и не смог ее заюзать ни в линуксе, ни в wine, ни даже просто в винде - везде пердолинг, чтобы просто запустить программу.
В линуксе в 10-м Debian пердолинг остановился на
Error: MC Extractor crashed, please report the following:
Traceback (most recent call last):
File "MCE.py", line 1005, in <module>
mce_hdr(mce_title)
File "MCE.py", line 919, in mce_hdr
hdr_pt,hdr_pt_empty = mc_table([], False, 1)
File "MCE.py", line 884, in mc_table
pt.set_style(prettytable.UNICODE_LINES)
AttributeError: module 'prettytable' has no attribute 'UNICODE_LINES'
и вообще отсутствии требуемого в Readme модуля pltable, который предлагается ставить pip3 install pltable но в дебиане 10 нет пип3 - он нарушал бы целостность пакетной системы. И модуля pltable в репах тоже нет.
Скачал exe-ник, откомпилированный питонинсталером и заботливо выложенный автором. MCE.exe - запускаю wine MCE.exe и фигак
INTERNAL ERROR: Cannot create temporary directory!
Гугление показало, что это опять пердолинг сделать, чтобы заработало.
Хрен с вами, запустил нативную винду 7-ку и там уже MCE.exe, так и там «радость» сразу - окошечко с ошибкой и надписями
MCE.exe - Системная ошибка
Запуск программы невозможен, так как на компьютере отсутствует
api-ms-win-crt-runtime-I1-1-0.dll. Попробуйте переустановить
программу.
Сначала подумал, что наверное, ей мало exe и надо, чтобы я питон или какие-то его части поставил на винду, а я в чистой системе запустил, но оказывается это надо в винду доустановить какое-то обновление для среды Си. Но потом уже продолжу.
Устал уже, настроение испорчено. Потом запущу, если очередного пердолинга после и в этом моменте не будет. Вот такой подход блин.
В общем, суть ясна пишут программы, может и хорошие, OpenSource опять же, но явно зачастую толком нигде кроме среды разработки у автора или у таких же разработчиков не проверяют.
Доброго времени суток, лорчане и лорчанки.
Недавно я поставил Xen на свой ноут с Debian 10 Buster и решил поиграть в сеньор-дева решений виртуализации enterprise-класса. Я понял, что проиграл, когда после запуска системы в качестве dom0 внутри Xen обнаружил, что у меня отвалился X-сервер. И startx, и xinit, и init 5, и много других способов стартовать Иксы заканчивались ничем. startx, например, просто возвращал информацию о том, что надо немного подождать, пока X-сервер не начнёт принимать соединения, а по истечению некоторого времени просто оставлял все попытки родить оболочку с ошибкой Connection refused.
К счастью, клавиатура не отвалилась и я смог собрать немного инфы о своей проблеме через утилиты типа lspci и lsusb. Вот какие странности я обнаружил сразу после этого:
- Сеть в dom0 отсутствует - dmesg даже ругается, что link not ready для ipv6;
- lspci вешает dom0. Намертво. Не помогает даже отправка SIGINT в терминал. При загрузке ванильного Дебиана без гипервизора такого не возникает;
- lsusb возвращает идентичный вывод как внутри гипервизора, так и вне его;
- upower –dump вешает dom0 на некоторое время, возвращая затем ошибку о том, что какая-то из служб systemd не работает. Как вы уже могли догадаться, без гипервизора всё работает замечательно;
- reboot, halt, shutdown и poweroff просто вешают систему после ввода этих команд, так что вырубить ноут можно только силой, нажав на кнопку питания.
Но самое вкусное - lsmod внутри Xen dom0 показывает на пару десятков меньше загруженных драйверов, чем вне его. Если вы ещё не поняли масштаб трагедии - в Qubes OS, стоящей на соседней машинке, при загрузке в окружение с Зеном выключаются разве что драйвера от другого гипервизора - KVM, но в моём Дебиане в астрал уходит, похоже, вообще всё, что может туда уйти. После такого неудивительно, что система адски лагает - драйвера-то не работают.
В попытках решить эту проблему я перечитал гору документации к Xen и кучу логов dmesg, даже написал в рассылку xen-users, но и там никто не подсказал мне, как решить эту проблему. Я нашёл несколько юзеров с похожими проблемами с X-сервером на сайтах типа Stackoverflow и на форуме Gentoo, но их решения либо не сработали на моей системе, либо решали немного другой косяк, где логи dmesg и xorg явно указывали на проблему. В данном случае чтение логов мне не помогло.
Плюнув, я решил просто на всякий случай переустановить Xen, добавив в sources.list пакеты contrib и non-free… и оно заработало! Я смог получить доступ к сети изнутри dom0, а lspci корректно вывел информацию о девайсах на шине!
Правда, Иксы так и не завелись.
К счастью, в этот раз они выдали другую ошибку - no screens found. Пару дней назад у меня была аналогичная проблема, и я исправил её, скачав пакет firmware-amd-graphics и сгенерировав новый xorg.conf, где заменил все упоминания amdgpu на radeon. Пакет firmware-amd-graphics я потом удалил, потому что всё работало и без него. Я вошёл в обычный Дебиан без Xen и сделал всё то же самое, убедился, что иксы успешно стартуют и, счастливый, перезагрузился в зеновский dom0, уже предвкушая, как буду ставить Винду в HVM, чтобы играть в GTA 5 без костыля в виде Вайна…
Угадайте, что я обнаружил после того, как загрузился в Xen. Мою отвисающую челюсть было очень непросто удержать от падения на пол.
После установки прошивки, в dom0 вновь отвалились Иксы и куча драйверов. Команда upower опять не работала так, как надо, а lspci вновь стал намертво вешать систему.
Между тем, в окружении без Xen, в ванильном Дебиане всё работает как часы.
Я грешил на то, что как-то неправильно поставил гипервизор, думал, что он почему-то не даёт некоторым драйверам загрузиться и поэтому не всё работает так, как надо, думал, что надо будет пересобрать проблемные драйвера и проблема решится сама собой. В какой-то момент я даже подумал, что это, должно быть, редкий баг в Зене или Дебиане, или что Зен, возможно, просто не совместим с моим железом. Но всё оказалось куда проще: прошивка AMD порезала мой dom0. А после того, как я переустановил Зен, он уничтожил то, что от неё осталось после того, как я её удалил, и поэтому у меня второй раз за неделю упали Иксы на ванильном Дебиане.
Я банально не знаю, как решить эту проблему. Во время установки пакетов apt пишет, что отсутствует прошивка для amdgpu. Ранее он жаловался на отсутствие таковой для radeon, но, поскольку я уже понял, к чему приводит её установка, я, пожалуй, воздержусь от установки ещё одной, чтобы не сломать всё окончательно. Ещё я заметил, что и установка Зена, и установка прошивки создаёт новый initrd с помощью update-initramfs. Я подозреваю, что, возможно, новый рамдиск создаётся криво, и Зен не может загрузить все модули, рожая в ответ такие фокусы. Тем не менее, я всё ещё не до конца уверен в том, что происходит, и боюсь лишний раз повредить что-нибудь своими неумелыми действиями. В общем, что делать? С меня как обычно.
Linux Debillian-Dev 4.19.0-11-amd64 #1 SMP Debian 4.19.146-1 (2020-09-17) x86_64 GNU/Linux
Xen 4.11
В каких случаях итератор QHash (Qt5) становится невалидным кроме случаев удаления целевого элемента или самого контейнера?
Из файла /etc/rc.conf:
# rc_logger launches a logging daemon to log the entire rc process to
# /var/log/rc.log
# NOTE: Linux systems require the devfs service to be started before
# logging can take place and as such cannot log the sysinit runlevel.
rc_logger="YES"
Первое сообщение в /var/log/rc.log:
rc default logging started at Thu Oct 15 17:59:37 2020
* Starting sysklogd ...
[ ok ]
То есть в логе нет не только sysinit, но и всего boot. Это так и должно быть? И таймингов тоже нет, как смотреть сколько какой демон стартовал?
Хочется в ArchXfce сделать комбинациюю клавиш для показа/переключения на рабочий стол.
(вроде как системные горячие удалил).
Какой командой он запускается, можно ли запускать из терминала, как будет в данном случае работать ?
P.S. Какие горячие клавиши используете вы и для чего ?
Купил вот такую вот штуку https://protosupplies.com/wp-content/uploads/2018/02/Relay-Module-8-x-5V.jpg
Есть подозрения что оно не работает ибо взял 6В от батареек, подключил минус к земле, плюс к плюсу и ко входу - результата нет. Светодиоды молчат. Контакты разомкнуты.
Аналогично пытался подключать к 3,3в и 5в с ст-линка.
Есть какой-то гарантированный способ понять что мне просто нужен другой модуль?
Привет.
Необходимо организовать онлайн-трансляцию со своего линукс-сервера на сайт. Есть готовый входящий поток. Совсем нет опыта в области администрирования серверов. Извините если вопросы будут звучать примитивно, поставили задачу разобраться.
- Устанавливаю сервер. Какой дистрибутив лучше брать или это не столь важно? Какие дополнительные настройки сервера необходимо сделать?
- Устанавливаю медиа-сервер, например wowza.
- Вешаю плеер на веб-страницу.
Как в линуксе передать wowza входящий поток и сгенерировать на выходе ссылку которую буду передавать плееру на веб-страницу?
Автор библиотеки notcurses выпустил новую версию 2.0 «stankonia». В этом релизе зафиксирован стабильный API библиотеки.
Notcurses это библиотека TUI для современных терминальных эмуляторов. Буквально переводя – не проклятия (not curses). Она написана на С, с использованием C++-safe headers. Доступны обёртки для Rust, C++ и Python.
( читать дальше... )
ONLYOFFICE Desktop Editors — это бесплатный офисный пакет, который объединяет редакторы текста, электронных таблиц и презентаций, позволяя создавать, просматривать и редактировать документы, хранящиеся на вашем ПК с Windows / Linux или Mac без подключения к Интернету. Он полностью совместим с форматами Office Open XML: .docx, .xlsx, .pptx.
Вот выдержка из примечания к выпуску:
Редактор документов
- возможность вставки даты и времени
- возможность распечатать выделение в режиме просмотра
- переделан алгоритм выравнивания абзаца с уплотняющими пробелами
Редактор электронных таблиц
- полная поддержка сводных таблиц
- настройки автофильтра в сводных таблицах
- полная поддержка слайсеров для форматных таблиц
- возможность перемещать лист из одной книги в другую
- возможность удаления повторяющихся значений
- возможность вставки функции через диалог аргументов функции
- параметры переноса текста и сжатия по размеру на правой панели инструментов
- параметр вертикального текста в настройках ориентации текста
- возможность изменить функцию в итоговой строке для форматированной таблицы
Редактор презентаций
- изменен интерфейс для внутренней ссылки
- возможность распечатать выделение в режиме просмотра
- редизайн меню маркеров и нумерации
Все редакторы
- возможность настройки масштабирования интерфейса приложения
- возможность вставки специальных символов
- настройки автозапуска для макросов
- добавлен список автокоррекции
- редизайн компонента выбора цвета
- горячая клавиша Ctrl + 0 для сброса масштаба
- изменено поведение скрытия значков во вкладках при уменьшении окна редактора
После долгого периода разработки, наконец вышел NoRT CNC Control 0.5.
Он являет собой систему управления трехкоординатным фрезерным станком с ЧПУ, позволяющую в качестве управляющего компьютера использовать обычный ноутбук или даже планшет.
Ключевая особенность заключается в разделении кода на 2 большие части: требующую realtime и не требующую. Та часть, которая требует realtime, выполняется на недорогом микроконтроллере. А остальное исполняется на обычном компьютере. И в отличии от других схожих систем, где к компьютеру добавляется некая плата расширения, тут нет жестких realtime требований к каналу связи, достаточно чтобы хватало пропускной способности. В качестве такого канала может выступать ethernet, uart (включая usb-uart переходник).
Это позволяет с одной стороны, обходиться доступным компьютерным железом, с другой объем памяти микроконтроллеров ограничен и поместить все в него было бы тупиком, т.к. это накладывает ограничения на развитие проекта.
Проект состоит из 3 компонент:
- прошивка для микроконтроллера(https://github.com/nort-cnc-control/cnccontrol_rt)
- сервер (https://github.com/nort-cnc-control/NoRTCNCControl)
- GUI (https://github.com/nort-cnc-control/NoRTGui-Qt).
В качестве микроконтроллеров поддерживаются stm32f103 с модулем enc28j60 для связи, а также arduino mega2560 со связью через штатный usb
Изменения:
- Добавлена поддержка ethernet для увеличения пропускной способности по сравнению с uart
- Код сервера полностью переписан на C#
- Добавлена поддержка arduino mega2560
- Устранены многочисленные баги (но возможно появились новые)
- Добавлен режим эмуляции в прошивку. В этом случае компилируется программа, выполняемая на компьютере, а не на микроконтроллере, что позволяет «пощупать» работу системы без наличия железа
- Добавлена возможность включать/выключать лазер или иное устройство во время движения
- UI тоже переписан, на QT
Обработка нештатных ситуаций:
- детектирование упирания в концевики. При этом происходит немедленная остановка. При движении на большой скорости фактическое положение головки не гарантируется, т.к. инерция
Система используется мною на моем настольном ЧПУ роутере
Есть сервер с ssh, и есть клиенты с automount’ами которые к нему подключаются. Когда сервер включен, все работает прекрасно, но если клиент запустился раньше сервера и зашел в каталог на котором висит автомаунт, то даже после того, как сервер поднялся, на клиенте надо перезапускать эти маунты вручную. Можно как-то сделать так, чтоб это было в автомате?
P.S. Я полагаю, что можно написать service-файл, который будет постоянно мониторить нет-ли отвалившихся соединений и перезапускать их маунты, но может это можно сделать как-нибудь попроще?
Привет. Есть у нас некий запущенный процесс, мы хотим его завершить с сохранением текущего состояния на диск. Понятно, что любой процесс использует некоторые системные ресурсы. В общем неинтересна любая возня с самопальной прокладкой-менеджером системных ресурсов. Интересуюсь о наличии некоторой системной функции, которая сохранит занятое адресное пространство на диск, инфу об используемых ресурсах и тп, и позволит столь же просто восстановить предыдущее состояние через один вызов некой функции с файлом образом в качестве аргумента. Т.е. сохранять не снаружи ничего неподозревающей софтины хочу, а заюзать внутри собственного кода, ну это просто проще, если не заморачиваться с сохранением. Вроде никакого волшебства, все просто, может так можно?
Искал плагин под Xfce для WireGuard, так ничего нормального и не нашел. Набросал свой на скорую руку, правда python 2, но работает стабильно. На тройку что-то никак не перепишу, да не оформлю в GitHub, может здесь кому-то пригодиться пока:
#!/usr/bin/python
#coding=utf-8
# RUN: sudo ./vpnwidget.py wg0-client
import gtk, json, urllib2, socket, sys, os, subprocess
import netifaces as ni
class VPNWidget:
def __init__(self):
self.VPN_INTERFACE_NAME = sys.argv[1]
self.vpn_state = "down"
self.tray = gtk.StatusIcon()
self.tray.connect('popup-menu', self.on_right_click)
self.get_info()
def get_info(self):
ipaddr = socket.gethostbyname(socket.gethostname())
gateway = realip = city = country = " - "
vpn_state_path = '/sys/class/net/' + self.VPN_INTERFACE_NAME
self.vpn_state = "down"
if os.path.exists(vpn_state_path):
self.vpn_state = "up"
self.tray.set_from_stock(gtk.STOCK_CONNECT)
vpn_state_text = "Подключен"
else:
self.tray.set_from_stock(gtk.STOCK_DISCONNECT)
vpn_state_text = "Отключен"
try:
gw = os.popen("ip -4 route show default"
.read().split()
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect((gw[2], 0))
ipaddr = s.getsockname()[0]
gateway = gw[2]
try:
url = 'ipinfo.io/json'
response = urllib2.urlopen(url)
data = json.load(response)
realip = data['ip']
city = data['city']
country = data['country']
except:
self.notify_message("ОШИБКА :: Проблемы с Интернетом"
except:
self.notify_message("ОШИБКА :: Проблемы с интерфейсом"
vpn_ipaddr = ""
if self.vpn_state == "up":
vpn_ipaddr = ni.ifaddresses(self.VPN_INTERFACE_NAME)[ni.AF_INET][0]['addr']
result = ("VPN: " + vpn_state_text
+ "\nЧастный IP: " + ipaddr + ((", " + vpn_ipaddr) if vpn_ipaddr else ""
+ "\nШлюз: " + gateway
+ "\nПубличный IP: " + realip
+ "\nГород: " + city + " (" + country + "
"
self.tray.set_tooltip((result))
self.notify_message(result)
return result
def notify_message(self, message):
subprocess.Popen(['notify-send', message])
return
def on_right_click(self, icon, event_button, event_time):
self.make_menu(event_button, event_time)
def make_menu(self, event_button, event_time):
menu = gtk.Menu()
# Меню <Подключиться>
item_up = gtk.ImageMenuItem(gtk.STOCK_CONNECT)
item_up.show()
menu.append(item_up)
item_up.connect('activate', self.run_vpn_up)
# Меню <Отключиться>
item_down = gtk.ImageMenuItem(gtk.STOCK_DISCONNECT)
item_down.show()
menu.append(item_down)
item_down.connect('activate', self.run_vpn_down)
# Включаем/отключаем доступность пункта меню
if self.vpn_state == "up":
item_up.set_sensitive(False)
item_down.set_sensitive(True)
else:
item_up.set_sensitive(True)
item_down.set_sensitive(False)
# Меню <Обновить>
item_refresh = gtk.ImageMenuItem(gtk.STOCK_REFRESH)
item_refresh.show()
menu.append(item_refresh)
item_refresh.connect('activate', self.refresh_info)
# Меню <О программе>
item_about = gtk.MenuItem("О программе"
item_about.show()
menu.append(item_about)
item_about.connect('activate', self.show_about_dialog)
# Меню <Выход>
item_quit = gtk.ImageMenuItem(gtk.STOCK_QUIT)
item_quit.show()
menu.append(item_quit)
item_quit.connect('activate', gtk.main_quit)
menu.popup(None, None, gtk.status_icon_position_menu,
event_button, event_time, self.tray)
def run_vpn_up(self, widget):
# Подключение
os.system('wg-quick up ' + self.VPN_INTERFACE_NAME)
self.get_info()
def run_vpn_down(self, widget):
# Отключение
os.system('wg-quick down ' + self.VPN_INTERFACE_NAME)
self.get_info()
def refresh_info(self, widget):
self.get_info()
def show_about_dialog(self, widget):
about_dialog = gtk.AboutDialog()
about_dialog.set_destroy_with_parent(True)
about_dialog.set_icon_name("VPNWidget"
about_dialog.set_name('VPNWidget')
about_dialog.set_version("1.0"
about_dialog.set_copyright("(C) 2020 Денис Ткаченко"
about_dialog.set_comments(("Программа для управления VPN (WireGuard)"
)
about_dialog.set_authors(['Денис Ткаченко <[email protected]>'])
about_dialog.run()
about_dialog.destroy()
if __name__ == "__main__":
VPNWidget()
gtk.main()
Просто, не знаю когда руки дойдут, чего добру пропадать, верно? Кстати, на ЛОР-е не хватает руководства по настройке этой замечательной штуки (WireGuard).
P.S. Используя мой скрипт, естественно, не запускайте WireGuard на клиенте в качестве сервиса. Он работает с командами wg-quick up/down, иконка программы помещается в трей, все действия с контекстного меню. Неделю пользуюсь - полет нормальный. Всем добра!