четверг, 18 декабря 2025 г.

Debian 12 + VirtualBox + QTech

Заметка на добавление репозитария в Debian 12 через новый формат deb822.

В каталоге /etc/apt/sources.list.d можно создавать отдельные файлы репозитория, воспользуемся этим.

Для VirtualBox cоздаём в каталоге файл с именем oracle-virtualbox.sources:

nano  /etc/apt/sources.list.d/oracle-virtualbox.sources

Содержимое файла:

# VirtualBox
#
Types:      deb
URIs:       https://download.virtualbox.org/virtualbox/debian/
Suites:     bookworm
Components: contrib
Enabled:    yes
Signed-By:  /etc/apt/keyrings/oracle_vbox_2016.asc
Architectures: amd64

Сохраняем. Теперь надо скачать файл верификации:

cd /etc/apt/keyrings/
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc

Выполняем аналогично для QElectroTech. Создаем файл qelectrotech.sources:

nano  /etc/apt/sources.list.d/qelectrotech.sources

Содержимое файла:

# draw electric diagrams with QElectroTech
#
Types:      deb
URIs:       https://debian.qelectrotech.org/qet/builds/debian/
Suites:     stable
Components: main
Enabled:    yes
Signed-By:  /etc/apt/keyrings/Qelectrotech_Repository.asc
Architectures: amd64

Сохраняем. Cкачиваем файл верификации:

cd /etc/apt/keyrings/
wget -q https://debian.qelectrotech.org/qet/builds/debian/Qelectrotech_Repository.asc

Можно приступить к установке: 

apt update
apt install virtualbox-7.1 qelectrotech

Пользуемся. 

пятница, 21 ноября 2025 г.

Debian + lightdm + xfce. Несколько мониторов в системе.

Имеется рабочее место с 3 мониторами + телевизор. Кода компьютер загружается и появляется окно ввода логина и пароля, оно расположено на не основном мониторе. Будем это исправлять.

Необходимо будет создать файл 99_user.conf в следующей директории:

/usr/share/lightdm/lightdm.conf.d

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

[Seat:*]
display-setup-script=xrandr --output DVI-D-0 --auto --primary --output HDMI-0 --same-as DVI-D-0 --output HDMI-1 --rotate right --left-of DVI-D-0 --output DP-2 --right-of DVI-D-0

Следующий файл 98_user.conf создаем директории:

/usr/share/lightdm/lightdm-gtk-greeter.conf.d

Этим укажем какой монитор сделать активным.Вот пример содержимого файла:

[greeter]
active-monitor=DVI-D-0

Перезагружаем компьютер и пользуемся с удовольствием)

ПС. Посмотреть на какие выходы видеокарты подключены мониторы поможет команда xrandr.

Debian multiseat. Компьютер на нескольких пользователей.

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

Приведу пример как я создал конфигурацию на 2 пользователя, но возможно и более, главное чтобы были необходимые компоненты и достаточно мощности компьютера. Для этого понадобиться 2 видеокарты, встроенная в процессор/материнскую плату и установленная в слот PCI Express (PCI-E), соответственно несколько мониторов и два комплекта периферии (мышь+клавиатура).

Для просмотра конфигурации текущего рабочего места нужно ввести команду, она выведет "дерево" устройств :

loginctl seat-status

Добавление устройств в новое рабочее место производим командой:

loginctl attach имя рабочего места полный путь к устройству

Вот пример добавления в рабочее место с именем seat1 видеокарты:

loginctl attach seat1 /sys/devices/pci0000:00/0000:00:02.0/0000:02:00.0/drm/card1
loginctl attach seat1 /sys/devices/pci0000:00/0000:00:02.0/0000:02:00.0/drm/renderD129
loginctl attach seat1 /sys/devices/pci0000:00/0000:00:02.0/0000:02:00.1/sound/card2

Следующим пунктом я добавил вторую звуковую карту, подключенную в слот PCI, таким образом звуки разных рабочих столов будут разделены:

loginctl attach seat1 /sys/devices/pci0000:00/0000:00:14.4/0000:06:06.0/sound/card3

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

loginctl attach seat1 /sys/devices/pci0000:00/0000:00:12.0/usb6/6-1
loginctl attach seat1 /sys/devices/pci0000:00/0000:00:12.0/usb6/6-2
loginctl attach seat1 /sys/devices/pci0000:00/0000:00:13.0/usb7/7-3
loginctl attach seat1 /sys/devices/pci0000:00/0000:00:16.0/usb9

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

udevadm monitor --environment --udev

Для этого достаем мышь, которой будет пользоваться второй пользователь, из порта USB, вводим вышеуказанную команду и затем вставляем мышь в порт. Остановить вывод команды просто нажав комбинацию клавиш "CTRL" + "C".
Интересующая строка будет содержать add, на пример:

UDEV  [8581.895083] add     /devices/pci0000:00/0000:00:12.0/usb6/6-1
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:12.0/usb6/6-1
SUBSYSTEM=usb
DEVNAME=/dev/bus/usb/006/004
DEVTYPE=usb_device
.....

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

loginctl list-seats

Для просмотра конфигурации рабочего места seat1 вводим:

loginctl seat-status seat1

Тут должны отобразиться все устройства которые добавляли.

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

ПС. Если необходимо удалить все настройки рабочих мест, таким образом можно вернуть всё в начальное состояние, где все устройства "подключены" к рабочему месту по умолчанию seat0, вводим:

loginctl flush-devices

суббота, 16 августа 2025 г.

Conky + mdadm

 Решил выложить свой конфигурационный файл conky и вспомогательный файл для контроля состояния RAID массивов созданных через mdadm.
В данном варианте автоматизирован вывод дополнительной информации:

  • наименовании процессора AMD и его показателях;
  • наименовании видеокарты nVidia и её показателях;
  • о сетевых подключениях LAN (enp5s0) и Wi-Fi (wlp4s0) в зависимости от способа подключения к сети.

Содержимое conky.conf, расположенного по  следующему пути /home/$USER/.config/conky/:

--[[
Conky, a system monitor, based on torsmo
]]

conky.config = {
    alignment = 'top_right',
    background = true,
    border_width = 0,
    cpu_avg_samples = 2,
    default_color = 'white',
    default_outline_color = 'white',
    default_shade_color = 'black',
    double_buffer = true,
    draw_borders = false,
    draw_graph_borders = true,
    draw_outline = false,
    draw_shades = true,
    extra_newline = false,
    font = 'DejaVu Sans Mono:size=10',
    gap_x = 50,
    gap_y = 50,
    minimum_height = 50,
    minimum_width = 350,
    net_avg_samples = 2,
    no_buffers = true,
    out_to_console = false,
    out_to_ncurses = false,
    out_to_stderr = false,
    out_to_x = true,
    own_window = true,
    own_window_argb_value = 180,
    own_window_argb_visual = true,
    own_window_class = 'Conky',
    own_window_hints = 'sticky',
    own_window_type = 'normal',
    own_window_transparent = false,
    use_spacer = 'left',
    show_graph_range = false,
    show_graph_scale = false,
    stippled_borders = 0,
    update_interval = 1.0,
    uppercase = false,
    use_spacer = 'none',
    use_xft = true,
    xinerama_head = 1,
}

conky.text = [[
$nodename | $time
${scroll 40 $sysname $kernel on $machine}
${color green}Uptime:${alignr 1}$uptime
${color lightblue}${voffset -6}$hr$color
${color grey}CPU: ${color #FCAF3E}${execi 3600 cat /proc/cpuinfo | grep 'model name' | sed -e 's/model name.*: //' | uniq | awk '{print $0}'}
${color grey}CPU Temperature ${alignr 1}${color}${execi 10 sensors | grep 'k10|CPU' -E -A2 | grep '°C' | awk '{print $2}'}
${color grey}CPU Utilization ${alignr 1}${color}$cpu %
${color grey}CPU Frequency ${alignr 1}${color}$freq MHz
${color grey}GPU: ${color #FCAF3E}${execi 3600 nvidia-smi --query-gpu=gpu_name --format=csv,noheader,nounits} $color
${color grey}GPU Temperature ${alignr 1}${color}${execi 10 nvidia-settings -query [gpu:0]/GPUCoreTemp -t} °C
${color grey}GPU Utilization ${alignr 1}${color}${exec nvidia-smi | grep % | cut -c 71-73} %
${color grey}VRAM Utilization ${alignr 1}${color}${exec nvidia-smi | grep % | cut -c 47-64}
${color grey}GPU Power Draw ${alignr 1}${color}${exec nvidia-smi | grep % | cut -c 29-41}
${color grey}RAM Usage: ${alignr 1}${color}$mem / $memmax
$memperc% ${alignr 350}${color gold}${membar 10}
${color grey}Swap Usage: ${alignr 1}${color}$swap/$swapmax
$swapperc% ${alignr 350}${color gold}${swapbar 10}
${color lightblue}${voffset -6}$hr
${color grey}File systems:
${color lightblue}/ $color${fs_used /}/${fs_size /}
${color gold}${fs_bar 8 /}
${color lightblue}/home $color${fs_used /home}/${fs_size /home}
${color gold}${fs_bar 8 /home}
${color lightblue}/mnt/images[md121] $color${fs_used /mnt/images}/${fs_size /mnt/images}
${color gold}${fs_bar 8 /mnt/images}
${color lightblue}/mnt/multimedia[md122] $color${fs_used /mnt/multimedia}/${fs_size /mnt/multimedia}
${color gold}${fs_bar 8 /mnt/multimedia}
${color lightblue}${voffset -6}$hr
${color grey}   Name             __PID__ ${color 33E0FF}_CPU%_ ${color FF33E0}_MEM%_
${color 33E0FF}CPU% ${stippled_hr 1}
${color red}   ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${color purple}   ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color orange}   ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${color FF33E0}MEM% ${stippled_hr 1}
${color red}   ${top_mem name 1} ${top_mem pid 1} ${top_mem cpu 1} ${top_mem mem 1}
${color purple}   ${top_mem name 2} ${top_mem pid 2} ${top_mem cpu 2} ${top_mem mem 2}
${color orange}   ${top_mem name 3} ${top_mem pid 3} ${top_mem cpu 3} ${top_mem mem 3}
${color grey}${voffset -6}$hr
${color 33E0FF}${cpugraph cpu0 50,50 33E0FF FF0000 -tl} ${cpugraph cpu1 50,50 33E0FF FF0000 -tl} ${cpugraph cpu2 50,50 33E0FF FF0000 -tl} ${cpugraph cpu3 50,50 33E0FF FF0000 -tl} ${color FF33E0}${memgraph 50,120 FF33E0 FF0000 -tl}
${color grey}Processes:$color $processes  ${color grey}Running:$color $running_processes
${if_up enp5s0}${color lightblue}${voffset -6}$hr
${color grey}LAN up/down:${alignr 1}$color${upspeed enp5s0} / ${downspeed enp5s0}
$endif${if_up wlp4s0}${color lightblue}${voffset -6}$hr
${color grey}Wi-Fi up/down:${alignr 1}$color${upspeed wlp4s0} / ${downspeed wlp4s0}
$endif${color lightblue}${voffset -6}$hr
${color grey}md121 $color ${eval $${if_match "0" == "${execi 60 cat /proc/mdstat | grep md121 -A 1 | gawk -f ~/bin/conky4mdadm.sh --}"}$${color red}Warning!$${else}$${color green}[UU]$${endif}} ${color grey} ${diskio_read /dev/md121} ${color grey} ${diskio_write /dev/md121}
${color grey}md122 $color ${eval $${if_match "0" == "${execi 60 cat /proc/mdstat | grep md122 -A 1 | gawk -f ~/bin/conky4mdadm.sh --}"}$${color red}Warning!$${else}$${color green}[UU]$${endif}} ${color grey} ${diskio_read /dev/md122} ${color grey} ${diskio_write /dev/md122}
${color lightblue}${voffset -6}$hr
${color grey}ssd1 ${color grey} ${diskio_read /dev/sdd1} ${color grey} ${diskio_write /dev/sdd1}
${color grey}ssd2 ${color grey} ${diskio_read /dev/sdd2} ${color grey} ${diskio_write /dev/sdd2}
]]

Содержимое conky4mdadm.sh, расположенного по  следующему пути /home/$USER/bin/:

#!/bin/gawk -f
# This script checks the status of RAID arrays from /proc/mdstat
/_/ { state = 0; exit }
/blocks/ { state = 1 }
END { print state }

Файлу устанавливаем разрешение на исполнение.

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