пятница, 24 января 2025 г.

пятница, 22 ноября 2024 г.

Определение серийных номеров usb flash

 $ lsblk --output KNAME,SERIAL /dev/sdb

KNAME SERIAL
sdb   4CEDFB6D543AF360199308B2
пример, найденный в нете. Работает.
Скрипт (работает)
#!/bin/bash
for C in `ls /sys/block/`; do
    RE=`cat /sys/block/$C/removable`
        if [ $RE == "1" ] ;then
            #VENDOR=`/bin/udevadm info --name=/dev/$C | grep ID_VENDOR=|awk -F"=" ' { print $2}'`
            #MODEL=`/bin/udevadm info --name=/dev/$C | grep ID_MODEL=|awk -F"=" ' { print $2}'`
            #SERIAL=`/bin/udevadm info --name=/dev/$C | grep SERIAL_SHORT|awk -F"=" ' { print $2}'`
            #echo $VENDOR-$MODEL"-"$SERIAL #print as per your taste
            USB_SERIAL=`/bin/udevadm info --name=/dev/$C | grep ID_SERIAL=|awk -F"=" ' { print $2}'|awk -F"-" ' { print $1}'`
            echo  $USB_SERIAL #or just the default one
        fi
done

Такой утилиты нет, не проверено.
# smartctl /dev/sda -i | grep Serial
Serial Number:    S1D3LYBG290266

пятница, 15 ноября 2024 г.

Контроль сервисов через скрипт crontab

На примере сервисов RapidScada (приложения dotnet)


Контроль Коммуникатора

#!/bin/bash

STATUS="$(systemctl is-failed scadacomm6.service)"

if [ "${STATUS}" = "failed" ]; then

    systemctl restart scadacomm6.service

else

    exit 1

fi


Контроль  WEB

#!/bin/bash

STATUS="$(systemctl is-failed scadaweb6.service)"

if [ "${STATUS}" = "failed" ]; then

    systemctl restart scadaweb6.service

else

    exit 1

fi


Файлы например scadacomm6Ctl.sh и scadaweb6Ctl.sh - дать права на исполнение
далее crontab -e - добавляем запись

* * * * * root /opt/scada/scadaweb6Ctl.sh
И перезагрузка cron -  service cron reload

суббота, 7 сентября 2024 г.

Запуск графических приложений, используя systemd

 Для запуска графического приложения через systemd используем .service

Пример запуска экранной клавиатуры сервисом при старте устройства от пользователя (ubuntu в примере) после старта графической оболочки. 

onboard.service

--------------------------------------------------------------------------------------------------------------------------

[Unit]

Description=Start onboard

PartOf=graphical.target

After=graphical.target


[Service]

Type=Application

Environment="DISPLAY=:0"

Environment="XAUTHORITY=/home/ubuntu/.Xauthority"

ExecStartPre=+sh -c 'touch /var/run/onboard.pid'

ExecStart=/usr/bin/onboard

ExecStartPost=+sh -c 'pgrep onboard > /var/run/onboard.pid'

SyslogIdentifier=onboard

Restart=always

PIDFile=/var/run/onboard.pid

OOMScoreAdjust=-100

User=ubuntu

Group=ubuntu


[Install]

WantedBy=graphical.target

--------------------------------------------------------------------------------------------------------------------------


Номер дисплея можно посмотреть командами

ls /tmp/.X11-unix

ls /tmp/.X11-unix | tr 'X' ':'

ps e | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u (непосредственно пользователем)

ps e -u ubuntu | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u (указав пользователя ubuntu)

понедельник, 8 апреля 2024 г.

1 Wire на OrangePi Zero3

lsb_release -a

Distributor ID: Debian

Description:    Debian GNU/Linux 12 (bookworm)

Release:        12

Codename:       bookworm

-------------------------------------------------------------------------------------------------------------
Создаем текстовый файл dts с содержимым
-------------------------------------------------------------------------------------------------------------

/dts-v1/;

/ {
        compatible = "allwinner,sun50i-h616";

        fragment@0 {
                target = <0xffffffff>;

                __overlay__ {

                        w1_pins {
                                pins = "PC09";
                                function = "gpio_in";
                                phandle = <0x1>;
                        };
                };
        };

        fragment@1 {
                target-path = [2f 00];

                __overlay__ {

                        onewire@0 {
                                compatible = "w1-gpio";
                                pinctrl-names = "default";
                                pinctrl-0 = <0x1>;
                                gpios = <0xffffffff 0x2 0x09 0x0>;
                                status = "okay";
                        };
                };
        };

        __symbols__ {
                w1_pins = "/fragment@0/__overlay__/w1_pins";
        };

        __fixups__ {
                pio = "/fragment@0:target:0", "/fragment@1/__overlay__/onewire@0:gpios:0";
        };

        __local_fixups__ {

                fragment@1 {

                        __overlay__ {

                                onewire@0 {
                                        pinctrl-0 = <0x0>;
                                };
                        };
                };
        };
};
------------------------------------------------------------------------------------------------------------

Далее нужно обновить конфигурацию дерева устройств и задать номер pin, который будет слушать наш драйвер.  Использовал pin PC9 - gpios 0x2 (C третья буква)

пример конвертации файлов dtb или dtbo в dts и обратно.

# apt-get install device-tree-compiler
# cd /boot/orangepi
# dtc -b 0 -O dts -I dtb -o any.dts any.dtb # dtb -> dts
# редактируем наш dts
# dtc -b 0 -O dtb -I dts -o any.dtb any.dts # dts -> dtb(o)

dtc -b 0 -O dtb -I dts -o sun50i-h616-w1-gpio.dtbo sun50i-h616-w1-gpio.dts


в /boot/orangepiEnv.txt добавлена только строка, возможно и не нужна.

overlays=w1-gpio

в /etc/modules ничего не добавляется.

воскресенье, 28 августа 2022 г.

Проброс портов через socat

apt install socat

socat tcp-l:4000,reuseaddr,fork /dev/mydev/Com1,raw,echo=0,b115200 2>1 1>/dev/null&

Через TCP порт 4000, скорость 115,2 кбит/с

socat tcp-l:4001,reuseaddr,fork /dev/mydev/Com2,raw,echo=0,b2400,cs8,parenb=1 2>1 1>/dev/null&  

Команды для контроля

ps aux | grep socat