Продолжение заметки «Терминальный клиент 1С на RaspberryPI«.  Здесь описывается установка ОС и необходимых программ на RPi.

Куплена на Aliexpress за 36$ RaspberryPi 3 Model B.  Краткие характеристики:

4-х ядерный ARM 64-bit процессор, 1Gb ОЗУ, встроенный WiFi и выход видео через HDMI.

 

 

 

 

 

читать дальше

Устанавливаем Raspbian,  ссылка на официальный сайт RPi.

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

Размер образа при этом составит 350мб против 1,7гб в полной версии.

Подключаем SD карту (у меня 8Гб) и смотрим, например, в «Управление разделами KDE » как она видна в системе:

 

 

 

 

 

 

 

 

распаковываем скаченный образ из архива в удобное место (у меня «forPi», указывать в команде надо будет полный путь), и записываем на карту:

sudo dd if=/home/valery/forPi/2018-04-18-raspbian-stretch.img of=/dev/sdf  bs=5M

и менее чем чере 4 минуты ОС готова к запуску, осталось вставить карту и запускать Pi.

944+1 записей получено
944+1 записей отправлено
4953473024 bytes (5,0 GB, 4,6 GiB) copied, 280,863 s, 17,6 MB/s

Можно заранее подправить конфигурационный файл если нам нужен статический адрес:

sudo nano /etc/dhcpcd.conf

interface eth0
static ip_address=192.168.10.70/24
static routers=192.168.10.101
static domain_name_servers=192.168.10.101 8.8.8.8

вход по ssh запрещен, чтобы разрешить достаточно в разделе boot создать пустой файл с именем ssh

user pi  password raspberry

 

Сканер к WIN7 работающей в VirtualBox подключается привязкой COM порта к физическому устройству в линукс системе.

путь должен быть /dev/ttyS0 для первого порта и далее соответственно. Номер порта в настройках указываем любой желаемый, таким он затем и появится в WIN.

читать дальше

При всей своей простоте вылезла досадная ситуация — при передаче данных в окошко теста устройства в 1С все цифры штрихкода отображаются верно, а вот при считывании в документ обработка или ругается на недопустимый аргумент, либо вызывает несколько товаров не имеющих отношения к сканируемуму коду. Явно происходит ошибка передачи данных. Что интересно для USB устройств в режиме эмуляции COM порта этого не происходит.

Решение — включить аппаратный контроль потока. В настройках соответствующего СОМ винды (по умолчанию выключено) этого недостаточно

 

 

 

 

 

 

 

 

 

 

 

 

потому что он  при заводских настройках не включен и в  сканере.

Настройки сканера, распечатываем штрихкоды настроек:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

последовательно считываем «Начать/Завершить» ->  «Разрешить XON/XOFF» ->  «Начать/завершить»

Есть еще по умолчанию включенный, но не нужный суффикс «LF» (он следует за нужным суффиксом «CR»), его видно при тестовом считывании в настройках оборудования 1С,

в принципе он не должен мешать, но можно его убрать (запретить LF) :

После этого сканер стал читать идеально.

Могу предположить, что такие-же настройки могут помочь с ошибками в передаче при подключении удаленным рабочим столом RDP.

Комментарии, обсуждение.

Заметка заполняется по мере решения отдельных вопросов, может когда-нибудь станет последовательной и законченной. Пока же нет.

Кратко по конфигурации: сервер на Кубунту 18.04, на нем VirtualBox, под которым запускается Win7 для терминального доступа к 1С. На RaspberryPi установлен Raspbian и FreeRDP для подключения к удаленной сессии и usbip для передачи сканера и принтера по локальной сети к линукс-серверу, который в свою очередь штатными настройками VirtualBox передает их в уиндовс.

Вначале были попытки перевести сканер в режим клавиатуры и соединять его посредством RDP. Сплошные минусы — при задержке передачи часто пропадают цифры. В 1С невозможно включить штатную обработку, она рассчитана на использование COM-портов, а без нее надо тыкать мышей в нужное для заполнения поле. Вот если-бы через сеть передать сразу USB… Решение есть и  будет описано ниже. Протестировано на USB сканере  Honeywell MS5145, переведенный в режим com-порта и USB принтере чеков Posiflex.

читать дальше

Установка USBIP.
Используется для проброса портов USB от клиента к серверу,  при этом на клиенте ставим сервер USBIP, а с сервера будем подключаться к его (клиента) USB портам.
На Pi установлен:
pi@raspberrypi:~ $ lsb_release -a
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 9.3 (stretch)
Release: 9.3
Codename: stretch

версия ставится из дистрибутива:

sudo apt install usbip

подгружаем модули:

sudo modprobe usbip-core
sudo modprobe usbip-host
sudo modprobe vhci-hcd

Добавляем модули в автозагрузку:
sudo nano /etc/modules
usbip-core
usbip-host
vhci-hcd

смотрим доступные устройства:

pi@raspberrypi:~ $ sudo usbip list -l, —local
— busid 1-1.1 (0424:ec00)
Standard Microsystems Corp. : SMSC9512/9514 Fast Ethernet Adapter (0424:ec00)

— busid 1-1.2 (04d9:1203)
Holtek Semiconductor, Inc. : Keyboard (04d9:1203)

— busid 1-1.3 (0458:003a)
KYE Systems Corp. (Mouse Systems) : NetScroll+ Mini Traveler / Genius NetScroll 120 (0458:003a)

— busid 1-1.4 (0d3a:0369)
Posiflex Technologies, Inc. : unknown product (0d3a:0369)

— busid 1-1.5 (0c2e:0720)
Metrologic Instruments : Metrologic MS7120 Barcode Scanner (bi-directional serial mode) (0c2e:0720)

Расшариваем нужные устройства:

sudo usbip bind --busid=1-1.4
sudo usbip bind --busid=1-1.5

если все без проблем, то будет такой ответ:
usbip: info: bind device on busid 1-1.5: complete

запускаем демона:
sudo usbipd -D  (добавить в автозапуск!)

Посмотреть доступные устройства можно командой:
sudo usbip list -r localhost

Exportable USB devices
======================
— localhost
1-1.5: Metrologic Instruments : Metrologic MS7120 Barcode Scanner (bi-directional serial mode) (0c2e:0720)
: /sys/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5
: (Defined at Interface level) (00/00/00)

1-1.4: Posiflex Technologies, Inc. : unknown product (0d3a:0369)
: /sys/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4
: (Defined at Interface level) / unknown subclass / unknown protocol (00/00/02)

Синим цветом выделены значения портов, по которым можно выключить раздачу соответствующей командой:
usbip detach —port=00

Подключение с клиентской машины (в нашем случае от сервера с 1С к Rpi).

Сервер с Ubuntu 18.04. смотрим установленное ядро:

uname -a

Linux valery-desktop 4.15.0-21-generic

отдельного пакета для usbip нет, тут он в составе linux-tools, их и установим:

sudo apt install linux-tools-4.15.0-21-generic

P.S. вообще-то достаточно, и правильно. установить sudo apt install linux-tools-generic
и тогда команда будет находится в /usr/bin/usbip

так-же необходимо подключить модули usbip-core usbip-host vhci-hcd и поставить их в автозагрузку (аналогично ранее описанному).

подключаем устройство:

sudo /usr/lib/linux-tools/4.15.0-21-generic/usbip attach -r 192.168.10.202 —busid=1-1.5

смотрим:

valery@valery-desktop:~$ lsusb
….
Bus 005 Device 002: ID 0c2e:0200 Metrologic Instruments MS7120 Barcode Scanner

Подключен!

Привязка устройства к определенному симлинку.

В линуксе, в отличие от виндовс, устройство получает номер устройства по очереди подключения, например первый сканер будет /dev/ttyUSB0, второй /dev/ttyUSB1 и т.д.

При этом не важен в какой порт воткнули устройство, важна только очередность. Перезагрузив систему конечно устройства расположатся в определенном порядке по мере подключения ядром, но при например подключении нового какого либо похожего устройства мы можем «потерять» наш сканер.
В винде же жестко привязано к порту, может и плюс с одной стороны, с другой переткнув сканер в другой usb порт винда его принимает как совершенно новое устройство, и тот же сканер надо либо втыкать назад, либо перенастраивать программу на работу с другим портом.

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

(взято http://hsd.net.ua/privyazka-usb-ustroystv-k-ttyusb):

Имя файла может быть произвольным, важно только расширение ".rules"
sudo nano /etc/udev/rules.d/scaner.rules
****************
SUBSYSTEM=="tty", ENV{ID_MODEL}=="Honeywell_Scanning_and_Mobility_Scanner", SYMLINK+="HoneywellScanner"
****************
нужные параметры подглядываем из:
udevadm info --query=property --name=ttyUSB0 (естественно должен быть  порт с нужным нам устройством)

sudo service udev restart

Теперь наш сканер, неважно каким способом будет подключен, через usbip либо напрямую в компьютер, естественно будет получать свой путь по своим каким-то правилам и будет может быть устройством /dev/ttyUSB0, или там /dev/ttyUSB3, но получит постоянную ссылку /dev/HoneywellScanner, которую мы указали в настройках.

подсмотреть выхлоп просто:
cat /dev/HoneywellScanner и пикнуть сканером, в терминал должны вывалиться цифры от штрихкода.

Для отключения устройства выводим список устройств на портах:

sudo /usr/lib/linux-tools/4.15.0-20-generic/usbip port

Imported USB devices
====================
Port 00: <Port in Use> at Low Speed(1.5Mbps)
unknown vendor : unknown product (0c2e:0720)
3-1 -> usbip://192.168.1.102:3240/1-1.4
-> remote bus/dev 001/009
Port 01: <Port in Use> at Full Speed(12Mbps)
unknown vendor : unknown product (0d3a:0369)
3-2 -> usbip://192.168.1.102:3240/1-1.2
-> remote bus/dev 001/004

отключение соответственно командой:

/usr/lib/linux-tools/4.15.0-20-generic/usbip detach —port=00

 

Для возможности подключения в VirtualBox COM  портов нужно добавить пользователя, от которого запускается виртмашина, в группу dialout:

sudo usermod -a -G dialout valery

а VirtualBox, запущенный от пользователя, может не видеть  подсоединенные USB устройства, решение:

sudo usermod -a -G vboxusers valery

и обязательно перелогинится.

В VirtualBox сканер прописываем в настройки COM-port как устройство /dev/ttyUSB0 (или если сделали привязку к симлинку как было описано выше — /dev/HoneywellScanner)

и здесь вылазит одна интересная деталь — в этом случае в винде для сканера не надо ставить никаких драйверов (в отличие от прямого подключения usb-сканера)! Будет читаться назначенный порт как стандартный с драйверами от майкрософт.

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

В итоге настраиваем, как было сказано, подключение сканера как com, а для принтера делаем фильтр автоподключения по usb (версии 2).

Проблемы:

При всём хорошем, вылезла  проблема с VirtualBox, а именно то, что при например физическом отключении (либо если порт отключился в usbip) СОМ-порта виртуальная машина ругается на его отключение и затем его можно восстановить только перезагрузкой ВМ. То есть, например моргнет питание, сервер на UPS-e а Rpi без резервного питания — и всё,   перезагружай всех по очереди (тоже будет даже если кто-нибудь перевоткнет сканер! ). Это относится только к СОМ порту, принтер подключенный через USB работает конечно без проблем.
Надо подстраиваться под реалии:

Есть команда для создания псевдоустройств socat, кратко: создается пара двунаправленных устройств, в одно посылаем данные и во втором их получаем, и наоборот.

Создаем с ее помощью пару устройств (до запуска ВМ) и одно из них приписываем виртуальной машине как СОМ-порт,а так как устройства создаются с произвольными (свободными) номерами /dev/pts/X есть возможность сразу создать нужные именованные линки к ним, линки размещаем в /tmp чтобы не иметь проблем с правами.

socat pty,raw,echo=0,link=/tmp/COM1 pty,raw,echo=0,link=/tmp/inpCOM1

проверяем, в одном терминале открываем

cat /tmp/COM1

во втором шлем

echo 12345678 > /tmp/inpCOM1

получаем его в первом терминале. все работает.

Для автозапуска используем systemd, обязательно указать пользователя, иначе будет от рута и не будет доступа к pts устройству

sudo nano /etc/systemd/system/com1.service


[Unit]
Description=Create pseudo COM1-ports for VirtualBox

[Service]
Type=simple
ExecStart=/usr/bin/socat pty,raw,echo=0,link=/tmp/COM1 pty,raw,echo=0,link=/tmp/inpCOM1
User=valery

[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl enable com1.service
systemctl start com1.service

смотрим:
valery@valery-desktop:~$ systemctl status com1.service

● com1.service — Create pseudo COM-ports for VirtualBox
Loaded: loaded (/etc/systemd/system/com1.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2018-05-24 13:21:09 +06; 2s ago
Main PID: 8295 (socat)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/com1.service
└─8295 /usr/bin/socat pty,raw,echo=0,link=/tmp/COM1 pty,raw,echo=0,link=/tmp/inpCOM1

мая 24 13:21:09 valery-desktop systemd[1]: Started Create pseudo COM-ports for VirtualBox.

Теперь прописываем порт в Virtualbox:

 

 

 

 

 

 

Virtualox ругается, но принимает. Можно поставить галочку больше не показывать, в дальнейшем может попробую подобрать параметры порта, что-бы не ругался,
а может и ни к чему, пусть будет так:

 

 

 

 

 

 

 

 

 

Машина при этом загружается (при неправильных настойках СОМ порта виртбокс не стартует вообще), пробуем зайти в настройки торгового оборудования,
включаем тест сканера, и только теперь ( в смысле для чистоты эксперимента, можно было и заранее подключить перенаправление) делаем перенаправление вывода

valery@valery-desktop:~$ cat /dev/ttyUSB0 > /tmp/inpCOM1

пикаем сканером штрихкод и смотрим в 1С:

 

 

 

 

 

 

 

Всё замечательно проходит, теперь можно на «горячую» переподключать устройство.

Теперь создадим сервис для перенаправления ввода вместо вышеиспользованной команды cat /dev/ttyUSB0 > /tmp/inpCOM1
сервис динамический, будет запускаться с передаваемым из udev правила именем по следующему шаблону:

sudo nano /etc/systemd/system/usb2com\@.service                    # \@ слэш экранирует для bash спецсимвол «@»

[Unit] Description=Send data from usb dev to pty
After=com%i.service
BindsTo=dev-COM%i.device

[Service] Type=simple
ExecStart=/bin/dd if=/dev/COM%i of=/tmp/inpCOM%i bs=1
User=valery

systemctl daemon-reload
Запускается сервис командой systemctl start usb2com@1.service,
«1» между «@» и «.service» подставляется в юните как «%i»
BindsTo указывает сервису следить за устройством dev-COM%i.device, как только устройство исчезнет, сервис выгрузится.
Точное наименование устройства можно увидеть так:
systemctl list-units —all —full | grep «.device»
наше dev-COM1.device

Для автозапуска создадим правило в udev срабатывающее при подключении сканера:
nano /etc/udev/rules.d/scanner1.rules
SUBSYSTEM=="tty", ENV{ID_MODEL}=="Barcode_Device", ENV{ID_VENDOR_ID}=="065a", SYMLINK+="COM1", RUN+="/bin/systemctl --no-block start usb2com@1.service"
service udev restart
нужные параметры смотрим для соответствующего устройства в: udevadm info —query=property —name=ttyUSB0
срабатывание udev можно отслеживать командой
udevadm —debug monitor

Теперь при подключении данного сканера сработает првило в udev, которое создаст линк /dev/COM1 и запустит юнит usb2com@1.service, который  будет передавать данные из
/dev/COM1 во вход /tmp/inpCOM1 до тех пор, пока присутствует устройство. При отключении сканера юнит отключится, при подключении его заново запустит правило в udev.

С автоподключением сканера закончено, и неважно как он будет подключен, локально к машине либо по usbip.

 

Теперь нужно автоматизировать переподключение usbip.

проверка по порту и типу устройства, пример:

ACTION==»add»,SUBSYSTEM==»block»,DEVPATH==»/devices/pci0000:00/0000:00:14.0/usb3/3-3*»,RUN+=»/bin/su $env{valery} -c /home/valery/test.sh»

# ACTION==»remove»,SUBSYSTEM==»block»,DEVPATH==»/devices/pci0000:00/0000:00:14.0/usb3/3-3*»,RUN+=»/bin/su $env{valery} -c /home/valery/test.sh»

плохая затея ACTION==»remove», устройство переподключается при раздаче и сервис падает, но надо решать как выключать.

Рабочий вариант:

Установить sudo apt install linux-tools-generic (на x86 машинах, на Pi просто usbip)

————————————————

Автозапуск usbipd :

sudo nano /etc/systemd/system/usbipd.service

[Unit]
Description=usbipd daemon
After=network.target

[Service]
Type=forking
ExecStart=/usr/bin/usbipd -D

[Install]
WantedBy=multi-user.target

 

зарегистрировать и  в атозапуск:

systemctl daemon-reload

systemctl enable usbipd.service

systemctl start usbipd.service


Создать правило для сканера:

nano /etc/udev/rules.d/scanner.rules

ACTION==»add», SUBSYSTEM==»tty», ENV{ID_MODEL}==»Barcode_Device», ENV{ID_VENDOR_ID}==»065a», RUN+=»/bin/systemctl —no-block start usbdev@2-1.7.service»

sudo service udev resart

которое запускает Unit nano /etc/systemd/system/usbdev@.service

———————————————————————=

[Unit]
Description=usbip share device busid=%i
After=network-online.target
Requires=network-online.target

[Service]
Type=simple
ExecStart=/home/valery/.myscript/usbipdev.sh %i
User=valery

————————————————————————

sudo systemctl daemon-reload

который будет запускать скрипт слежения за устройством и подключением/переподключением при необходимости

nano /home/valery/.myscrypt/usbipdev.sh

________________________________________________________

#!/bin/bash

# USBDEV=065a:0009
SRVIP=192.168.10.63
# MYIP=192.168.10.68
MYIP=$(/bin/ip addr show eno1 | sed -En ‘s/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p’)
# echo «$MYIP»

BusID=$1

# USBDEV=$2 #херня получается, от юнита не передать, потому просто проверим что там на этом бусе сидит
VID=$(/bin/cat /sys/bus/usb/devices/$BusID/idVendor )
PID=$(/bin/cat /sys/bus/usb/devices/$BusID/idProduct )
USBDEV=»$VID:$PID»
# echo «$USBDEV»

CheckDef=60

function Sendmessage {
CURL_RESULT=$(curl -X POST «https://api.telegram.org/bot1111111111111111111111111/sendMessage» -d «chat_id=-11111111111111111111111111&text=${MESSAGE}» > /dev/null 2>&1 )
}

function LocalCheck {
# проверка на наличие устройства локально
if lsusb | grep -q «$USBDEV»; then :;
else

i=0
while [ $i -lt 5 ]; do
if lsusb | grep -q «$USBDEV»; then
StopS=0
break
else
StopS=1
i=$[$i+1] fi
sleep 1
done

if [ «$StopS» -eq 1 ]; then
MESSAGE=»Устройство $BusID не обнаружено локально, сервис будет отключен»
Sendmessage
sudo systemctl stop usbdev@$BusID.service
fi
fi
}

##########################################################################

# sudo -bn /usr/bin/usbip unbind —busid=$BusID

while true; do
# проверяем наличие сервера в сети
SRVCHK=0
while ! ping -c1 $SRVIP &>/dev/null; do
if [ $SRVCHK -eq 0 ]; then
MESSAGE=»Сервер $SRVIP недоступен с $MYIP»
Sendmessage
SRVCHK=1
fi
sleep 29
LocalCheck
done

# проверить на баинд, если нету то баиндить
if /usr/bin/usbip list -r localhost | grep -q «$USBDEV»; then :;
else
sudo -bn /usr/bin/usbip bind —busid=$BusID
MESSAGE=»Do bind bus $BusID device $USBDEV on $SRVIP»
Sendmessage
# посылаем команду серверу присоединить, коли было анбаинд, то и полюбому не присединено
ssh valery@$SRVIP sudo /usr/bin/usbip attach -r $MYIP —busid=$BusID
fi

# проверяем на сервере наличие устройства
if ssh $SRVIP lsusb | grep -q «$USBDEV»;
then Check=»$CheckDef»;
else
Check=1
MESSAGE=»Устройство $BusID на адресе $SRVIP не обнаружено, попытка переподключения»
Sendmessage
sudo -bn /usr/bin/usbip unbind —busid=$BusID
fi

sleep $Check

LocalCheck

done

exit

__________________________________________________________________________

чтобы не ругался выхлоп команды usbip list -r localhost
usbip: error: failed to open /usr/share/hwdata/usb.ids

надо скачать отсутствующий файл описания оборудования:

sudo wget http://www.linux-usb.org/usb.ids -P /usr/share/hwdata/

_____________________________________________________________________________________________________

передать ключ RSA для безпарольного входа:

со стороны Pi к серверу от пользователя:

ssh-keygen  # если ранее не генерировался

ssh-copy-id -i .ssh/id_rsa.pub адрес_сервера


дать разрешение управлять юнитом без пароля от пользователя, добавив в конец строку:

sudo visudo

ALL ALL=NOPASSWD: /usr/bin/usbip

Cmnd_Alias USBIP_CMDS = /bin/systemctl start usbdev@2-1.7.service, /bin/systemctl stop usbdev@*.service
ALL ALL=NOPASSWD: USBIP_CMDS

то-же на сервере для запуска без пароля команды usbip по ssh

ALL ALL=NOPASSWD:/usr/bin/usbip

 

Далее пойдет описание практических установок и настроек на основании вышеприведенных опытов.

Установка и настройки:

Автоподключение сканера:

переходим в root
sudo -s

Создаем сервис для перенаправления данных от пользователя valery:


user=valery; cat > /etc/systemd/system/usb2com\@.service << EOF
[Unit]
Description=Send data from usb dev to pty
After=com%i.service
BindsTo=dev-COM%i.device

[Service]
Type=simple
ExecStart=/bin/dd if=/dev/COM%i of=/tmp/inpCOM%i bs=1
User=$user

EOF

Создаем сервис для порта с номером N и запуском от пользователя valery


N=1; user=valery; cat > /etc/systemd/system/com$N.service << EOF
[Unit]
Description=Create pseudo COM$N-ports for VirtualBox

[Service]
Type=simple
ExecStart=/usr/bin/socat pty,raw,echo=0,link=/tmp/COM$N pty,raw,echo=0,link=/tmp/inpCOM$N
User=$user

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload

systemctl enable com1.service  # установить в автозагрузку только этот(эти) сервис(ы)

systemctl start com1.service

Создаем правило для udev запуска нашего usb2com сервиса (запись одной строкой без переносов!):

nano /etc/udev/rules.d/scanner1.rules

SUBSYSTEM=="tty", ENV{ID_MODEL}=="Barcode_Device", ENV{ID_VENDOR_ID}=="065a", SYMLINK+="COM1", RUN+="/bin/systemctl --no-block start usb2com@1.service"

service udev restart

 

 

 

Комментарии, обсуждение.

Под Ubuntu на launchpad.net есть готовые пакеты, гораздо свежее чем в дистрибутиве.
При установке под 16.04 сервер зависимостей не потребовалось, качаем и ставим (х64):
wget http://ppa.launchpad.net/dajhorn/dante/ubuntu/pool/main/d/dante/dante-server_1.4.1-1_amd64.deb
правим конфиг: sudo nano /etc/danted.conf

logoutput: syslog
user.privileged: root
user.unprivileged: nobody

# The listening network interface or address.
# указываем сетевой интерфейс типа venet0:0 либо IP-интерфейса, на котором слушаем, и соответственно порт
# если он не стандарный 1080 (тогда можно не указывать)
internal: 123.123.1.1 port = 8010

# The proxying network interface or address.
# отсюда уходят пакеты, аналогично internal вписываем устройство или адрес
external: 123.123.1.1

# socks-rules determine what is proxied through the external interface.
# The default of «none» permits anonymous access.
socksmethod: username

# client-rules determine who can connect to the internal interface.
# The default of «none» permits anonymous access.
clientmethod: none

client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect error
}

socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect error
}

создадим пользователя без группы, домашней директории и прав, чисто для авторизации:
sudo useradd socks5_user -M -N -s /sbin/nologin -p password

Напоследок
sudo service danted restart
и можно пользоваться.

Для отправки сообщений в Telegram посредством curl с использоваанием вышеописанного прокси, можно добавить несколько параметров в файл ~/.curlrc:

socks5 = 123.123.1.1:8010
proxy-user = user:password
user-agent = «Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1» # это надо ли?

изменение (снятие) ограничений на новый пароль:
sudo nano /etc/pam.d/common-password
password [success=1 default=ignore] pam_unix.so obscure sha512 # проверка на сложность и количество знаков
password [success=1 default=ignore] pam_unix.so minlen=1 sha512 # без ограничений

проверка SD карты (очень долгий процесс):
sudo badblocks -vw /dev/mmcblk0

Симптомами засорившегося встроенного фильтра  системы отопления газового  котла Ariston является общее понижение температуры и недостаточный нагрев теплоносителя, при этом происходит частое включение /выключение горелки.
ariston
Причина в том, что из-за забившегося фильтра приток остывшей «обратки» затруднен и циркуляционный насос котла начинает гонять жидкость по встроенному обводному малому кругу, быстро нагревая ее до заданной температуры, что приводит к отключению горелки. Затем замедленно подпитывающая обратка  разбавляет это небольшое количество нагретой жидкости, котел опять включается на нагрев,  быстро нагревается, отключается и т.д.  Общая эффективность нагрева естественно падает.

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

 

 

 

читать дальше

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

Затем отключите электропитание, перекройте краны подачи  и отвода отопления. Снимите переднюю крышку, крепящуюся снизу 2-мя винтами, оттянув низ ее на себя и приподняв вверх для снятия с верхних шпилек. Снять тепловую защиту камеры сгорания, крепящуюся двумя защелками. Для удобства лучше снять и правую стенку, крепится 4-мя винтами, два на лицевой части и два снизу, отвести чуть вправо и назад и она легко снимается.  Панель с регуляторами, манометром и всей схемой управления откидывается на петлях и после этого нам предоставится такой вид:

 

Цифрой 1 выделен клапан превышения давления.

Цифрой 2 место установки фильтра отопления.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

%d1%81%d0%b1%d1%80%d0%be%d1%81-%d0%b2%d0%be%d0%b4%d1%8b_site

 

 

 

 

 

 

 

 

Теперь можно приступать к демонтажу фильтра.

%d1%84%d0%b8%d0%bb%d1%8c%d1%82%d1%801

 

Трубочка вставлена  непосредственно в торец фильтра и идет к манометру.

 

 

 

 

 

 

 

%d1%84%d0%b8%d0%bb%d1%8c%d1%82%d1%802

 

Защелка, удерживающая трубку манометра

 

 

 

 

 

 

 

%d1%81%d0%bd%d0%b8%d0%bc%d0%b0%d0%b5%d0%bc-%d0%b7%d0%b0%d1%89%d0%b5%d0%bb%d0%ba%d1%83-%d1%84%d0%b8%d0%bb%d1%8c%d1%82%d1%80%d0%b0_site

 

Защелка фильтра

 

 

 

 

 

 

 

%d1%84%d0%b8%d0%bb%d1%8c%d1%82%d1%803

 

Убираем в сторону трубку

 

 

 

 

 

 

 

%d0%b2%d1%8b%d1%82%d0%b0%d1%81%d0%ba%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d1%84%d0%b8%d0%bb%d1%8c%d1%82%d1%80_site

 

Вытаскиваем фильтр, шел довольно туговато,

вытаскивал за ушко плоскогубцами слегка покачивая.

 

 

 

 

 

 

Вот такой «красавец» оказался у меня:

%d1%84%d0%b8%d0%bb%d1%8c%d1%82%d1%80_%d0%b3%d1%80%d1%8f%d0%b7%d0%bd%d1%8b%d0%b9_site

 

 

 

 

 

 

 

А это он после чистки акриланом и средством для духовок Abro:

%d1%84%d0%b8%d0%bb%d1%8c%d1%82%d1%80_%d1%87%d0%b8%d1%81%d1%82%d1%8b%d0%b9-site

 

 

 

 

 

 

 

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

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

Проявляйте осторожность, эта статья не является официальным руководством.

2

 

 

 

 

 

 

 

 

К сожалению, доступный в репозитарии kffmpegthumbnailer  устанавливается, но не работает в новой 16.04 Kubuntu.
И пока нет готового пакета, то для предпросмотра можно установить его из git,
читать дальше

но для этого предварительно нужно установить  следующие пакеты:
sudo apt install git build-essential cmake extra-cmake-modules kio-dev pkg-config libavformat-dev libavcodec-dev libswscale-dev

Затем клонируем и устанавливаем:

git clone git://anongit.kde.org/ffmpegthumbs
cd ffmpegthumbs
git checkout origin/frameworks
mkdir -p builddir
cd builddir && cmake .. -DCMAKE_INSTALL_PREFIX=$(kf5-config —prefix) -DCMAKE_BUILD_TYPE=Release -DKDE_INSTALL_USE_QT_SYS_PATHS=ON
sudo make install

Идем в настройки Dolphin и включаем ставшее доступным меню:
1

 

 

 

 

 

 

Собственно, создаются два файла и копируются в соответствующие директории:
— Installing: /usr/lib/x86_64-linux-gnu/qt5/plugins/ffmpegthumbs.so
— Installing: /usr/share/kservices5/ffmpegthumbs.desktop

С помощью checkinstall создал ffmpegthumbnailer.deb пакет для 64 разрядной системы. Естественно, еще должен быть установлен kubuntu-restricted-extras.

 

Возможность создавать ботов и наличие вэб-интерфейса в Telegram дает возможность очень просто реализовать отправку сообщений из Ubuntu (и конечно любого основанного на линукс дистрибутива) например с помощью команды curl. В заметке будет описано создание бота, чата, группы для рассылки и примеры использования простых скриптов: для определения и передачи внешнего ip адреса из локальной сети, а так-же оповещения отсутствия ответа на ping какого-либо хоста.
Создание бота:

Нужно найти в строке поиска клиентского приложения Telegram «прародителя» ботов @BotFather и начать с ним чат.

@BotFather

читать дальше

Он расскажет о себе и выведет список доступных команд:

telegram2

Просто кликнем на /newbot и дальше следуем предложенному Ботом диалогу:
Valery, [10.12.15 22:19] /newbot
BotFather, [10.12.15 22:19] Alright, a new bot. How are we going to call it? Please choose a name for your bot.
Valery, [10.12.15 22:23] My home bot
BotFather, [10.12.15 22:23] Good. Now let’s choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.
Valery, [10.12.15 22:23] Kononvaler_bot
BotFather, [10.12.15 22:23] Done! Congratulations on your new bot. You will find it at telegram.me/Kononvaler_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands.
Use this token to access the HTTP API:
123456789:ABBC*********************b
For a description of the Bot API, see this page: https://core.telegram.org/bots/api

Бот теперь у нас есть,  очень важно знать токен бота 123456789:ABBC*********************b и конечно никому его не показывать.

Теперь нужно создать с ним общий чат.
Создаем любую удобную группу, например Test (название потом можно изменить) и добавляем туда нашего бота.

telegram4

 

Нажимаем на квадратик в строке поиска

и откроется диалог добавления группы.

 

 

 

 

 

После создания группы добавляем участником бота,

его не будет в списке контактов, но находим его через

поиск по имени.

 

 

 

Теперь нужно выяснить id чата, куда будем посылать сообщения.

Для этого можно зайти в Telegram через вэб-интерфейс, зайти в созданную группу Test

telegram7

 

и в строке адреса браузера увидим нужный нам id.

 

Попробовал, уже не получилось. Другой способ:

Создаем ссылку вида https://api.telegram.org/bot<<токен бота>>/getUpdates?offset=0 и переходим по ней

откроется страница с несколькими строками служебной инфо, для нас в данном случае бесполезной. Идем через приложение в искомый чат и посылаем какое-нибудь сообщение, например «Get id», затем обновляем страницу в браузере и видим там новое сообщение с искомым идентификатором:

"channel_post":{"message_id":2199,"chat":{"id":-1234567890,"title":"My ip","type":"channel"},"date":1489116818,"text":"Get id"}}]}

Если вдруг появилась в сообщении ошибка 409 — не может использовать данный запрос пока активен вэбхук error_code»:409,»description»:»Conflict: can’t use getUpdates method while webhook is active» (а я его не включал вроде ???)
то чтобы его отключить отправляем вот такой пустой запрос (после setWebhook должно быть значение, в данном случае его нет) https://api.telegram.org/bot<<токен бота>>/setWebhook

Создаем команду отправки сообщения от бота в группу вида:

curl -X POST "https://api.telegram.org/bot<<токен бота>>/sendMessage" -d "chat_id=-1234567890&text= TEst test "

отправляем из терминала и:

telegram8

 

 

 

 

Работает.

Создаем скрипт определения внешнего  ip :
nano my_ip.sh

#!/bin/bash

#путь к файлу с сохраненным адресом
IPFILE=/home/valery/my_script/address.ip

if [ -f «${IPFILE}» ]; then
# если файл существует, то читаем значение из старого файла
source «${IPFILE}»
fi
NEWIPADDR=$(curl -s kaktotak.org/ip.php |grep -Po ‘\d.*(?=\s)’)
if [[ (-z ${IPADDR+x}) || («${IPADDR}» != «${NEWIPADDR}»)]];
then
# отправляем в канал, для новой строки в тексте можно использовать %0A, либо явно использовать новую cтроку
CURL_RESULT=$(curl -X POST «https://api.telegram.org/bot12345678:ABC*******************b/sendMessage» -d «chat_id=-1234567890&text=
Адреса дома: %0A Transmission http://${NEWIPADDR}:9091
Сайт http://${NEWIPADDR}
Plex http://${NEWIPADDR}:32400/web/index.html»)
fi

Добавляем в cron проверять каждые 10 минут
crontab -e
*/10 * * * * /home/valery/my_script/my_ip.sh

Использование для оповещения из командной строки:

Добавляем следующие строки в .bash.rc

alias teleok=’curl -X POST «https://api.telegram.org/bot12345678:ABC*******************b/sendMessage» -d «chat_id=-1234567890&text= Готово! «‘
telesend() { curl -X POST «https://api.telegram.org/bot12345678:ABC*******************b/sendMessage» -d «chat_id=-1234567890&text=$@» ;}

теперь можно добавить оповещение к окончанию  какой-либо длительной задачи, например

cp dir1 dir2 && teleok   здесь после завершения копирования в группу придет сообщение Готово! 

если использовать функцию telesend то можно отправить любое произвольное сообщение:

telesend  ‘ Текст сообщения’

rasp_pi

Ресурс где скачать https://www.raspberrypi.org/downloads/raspbian/
запись на карту sudo dd bs=4M if=2016-02-09-raspbian-jessie-lite.img of=/dev/mmcblk0
Первое подключение через проводной интерфейс
ssh pi@ip.address
пароль по умолчанию raspberry
первое действие при подключении: sudo raspi-config
В появившемся меню выполнить первый пункт по расширению root раздела на всё оставшееся место SD карты.
Установить локализацию, дополнительно к уже установленному En-Gb выбрав Ru-ru Utf8

читать дальше

Настройка подключения WiFi.

Для сканирования WiFi сети воспользуемся командой  sudo iwlist wlan0 scan.

Результатом будет список доступных сетей с дополнительной необходимой информацией.

Выгладит примерно так:

  1. ESSID:»My_wifi_network».  Понятно, что это название доступной сети.
  2. IE: IEEE 802.11i/WPA2 Version 1. Это используемый метод аутентификации, в данном случае это  WPA2, новый и более безопасный беспроводный стандарт, пришедший на смену WPA1. Эта настройка должна работать как для WPA так и для WPA2, но может не работать в WPA2 enterprise; для WEP hex keys смотрите последние примеры  здесь.

Настройка подключения  Raspberry Pi

Откройте wpa-supplicant конфигурационный файл при помощи редактора  nano:

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Прейдите в конец файла и добавьте следующие строки:

network={
    ssid="My_wifi_network"
    psk="My_wifi_password"
}

Теперь сохраняем файл нажатием ctrl+O и выходим через ctrl+X .

На этом этапе wpa-supplicant обычно принимает изменения в течении нескольких секунд и будет  пытаться соединиться с сетью.

Если этого не произошло, можно вручную перезагрузить интерфейс при помощи команд  sudo ifdown wlan0 затем sudo ifup wlan0, или перегрузить Raspberry Pi командой sudo reboot.

Можно проверить соединение командой ifconfig wlan0. Если поле inet addr заполнено полученным адресом, то Pi подключен к сети. Если нет, стоит проверить правильность введенных пароля и ESSID.

Другие настройки.

Если Pi не застрахован от сбоев питания, то не помешает включить автопроверку и исправление файловой системы после сбоя:
sudo nano /etc/default/rcS
в последней строчке убираем комментарий и правим дефолтовое «нет» на :
# automatically repair filesystems with inconsistencies during boot
FSCKFIX=yes

Установка Webmin

sudo apt-get install apt-show-versions libapt-pkg-perl libauthen-pam-perl libio-pty-perl libnet-ssleay-perl

wget http://download.webmin.com/download/repository/pool/contrib/w/webmin/webmin_1.801_all.deb

sudo dpkg -i webmin_1.801_all.deb

Делаем сервер печати:

У меня принтер HP, потому сразу устанавливал HPlip который при установке потянул за собой и  cups:

sudo apt-get install hplip

Добавляем пользователя pi в группу lpadmin

sudo usermod -a -G lpadmin pi

После установки доступ к вэб интерфейсу отсутствует, надо редактировать

sudo nano /etc/cups/cupsd.conf

добавить в секцию

 Order Deny,Allow
 Deny From All
 Allow From 127.0.0.1
 Allow From 192.168.1.*  # Это наша сеть откуда соединяемся.

Вэб интерфейс по умолчанию слушается только на локальном порту, разрешаем слушать со всех доступных интерфейсов:
# Only listen for connections from the local machine.
# Listen localhost:631
# Listen /var/run/cups/cups.sock
  Port 631

Перегружаем сервер печати
sudo service cups restart
и подключаемся к принт-серверу:
http://ip.addr.print.srv:631

Установил в прошлом году на свой Nexus 7 2012 (это первая версия) официальное обновление до 5 андроида от Google и страшно разочаровался. Хоть и расписывались преимущества шустрого и быстрого нового ART  в Lollipop против  Dalvik в KitKat,  меньшего потребления процессорных ресурсов и памяти программами, но в итоге из этого достаточно ранее динамичного устройства получился страшный тормоз (это при том что на нем установлено от силы пяток программ, и в фоне работают лишь пару мессенджеров). Дальнейшие обновления до версии 5.1.1 наивно ожидаемых улучшений так и не принесли. В итоге далее собран опыт отката на стоковый образ 4.4, естественно все действия производятся под Ubuntu, в моем случае 15.04.

Естественно, это описание подойдет не только для даунгрейда этой версии Nexus, но и для обновления, а в общем и установки  официальной прошивки семейства Nexus.

читать дальше

Установка SDK не обязательна, нужные утилиты adb и fastboot можно установить отдельно от него, из ppa, при этом будет скачено всего лишь 115 kБ архивов :
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install android-tools-adb android-tools-fastboot

Нужный образ для планшета берем на сайте Google Developers, в моем случае «nakasi» for Nexus 7 (Wi-Fi) 4.4.4 (KTU84P) . Разархивируем его и откроем терминал в получившейся директории.

Для соединения с планшетом необходимо включить возможность отладки по USB. Для этого в меню настроек нужно открыть подменю «О планшете», затем на строке «Номер сборки» тапнуть 7 раз, после чего всплывет окно с предупреждением, что вы включите возможности разработчика и он вам надо?  Соглашаемся.
Теперь в меню настроек появится новое подменю: «{} Для разработчиков», где и можно будет включить отладку по USB.
Если сейчас в терминале дать команду проверки подключенных устройств, то увидим:
adb devices
List of devices attached
015d4a82255bfa04 offline
в это время на планшете отобразится запрос на разрешение добавления цифрового отпечатка, ставим галочку «принимать всегда с этого компьютера» после чего при повторном запросе уже получаем:
adb devices
List of devices attached
015d4a82255bfa04 device
Всё, теперь можно переключаться в режим загрузки:

adb reboot bootloader
На экране перезагрузившегося планшета должен появиться препарированный зеленый робот.
запускаем установку:
./flash-all.sh
Далее пойдет такой диалог:
waiting for device

(bootloader) Bootloader is already unlocked
OKAY [ 0.020s] finished. total time: 0.020s
erasing ‘boot’…
OKAY [ 0.033s] finished. total time: 0.033s
******** Did you mean to fastboot format this partition?
erasing ‘cache’…
OKAY [ 0.155s]

не требующий вашего вмешательства, так-что ждем окончания прошивки, на что уходит:
rebooting…
finished. total time: 162.677s
Собственно и все.
Теперь после перезагрузки и входа в аккаунт устройство сразу же скачает новое обновление до 5.0.2 и предложит установить его, и это от которого только что избавились!

В области уведомлений длинным тапом на злополучном обновлении попадаем во всплывающее меню ‘О приложении’ , кликаем на нем и попадаем в его меню (Google Services Framework), далее пара простых шагов:
— снимаем метку с ‘Показывать уведомления’
— жмем кнопку ‘Удалить данные’ .
And now you can see Your System is up to date in System updates, the notification about update OS gone.

Вот теперь все.