И это всё МОЁ

Кто то может подсказать, где в Москве можно разместить за адекватные деньги блейд 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 в порядке. Менять порт пробовал.


Ошибки гуглил, нашел несколько тем, но ничего не понял. Ни причину, ни что делать. Нужен совет всемогущего ЛоРа.









 , , ,








И это всё МОЁ
Компания Valve опубликовала выпуск проекта Proton 5.13-1, который основан на наработках проекта Wine и нацелен на обеспечение запуска в Linux игровых приложений, созданных для Windows и представленных в каталоге Steam. Наработки проекта распространяются под лицензией BSD.



И это всё МОЁ

(Извините не совсем в тему так как общий вопрос а не по 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-подпись) (комментарий)
Но оба решения не помогли









 ,








И это всё МОЁ

Ocular не открывает djvu файлы с русским названием. Arch









 








И это всё МОЁ

Захотел я использовать программу 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в с ст-линка.

Есть какой-то гарантированный способ понять что мне просто нужен другой модуль?








 , ,








И это всё МОЁ

Привет.
Необходимо организовать онлайн-трансляцию со своего линукс-сервера на сайт. Есть готовый входящий поток. Совсем нет опыта в области администрирования серверов. Извините если вопросы будут звучать примитивно, поставили задачу разобраться.



  1. Устанавливаю сервер. Какой дистрибутив лучше брать или это не столь важно? Какие дополнительные настройки сервера необходимо сделать?

  2. Устанавливаю медиа-сервер, например wowza.

  3. Вешаю плеер на веб-страницу.


Как в линуксе передать 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 компонент:



В качестве микроконтроллеров поддерживаются 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, иконка программы помещается в трей, все действия с контекстного меню. Неделю пользуюсь - полет нормальный. Всем добра!








 , , ,