LINUX.ORG.RU

Сообщения Sunderland93

 

Как передать пароль GPG ключа при подписи пакетов собранных в Jenkins?

Приветствую. Имеется настроенная Jenkins CI, в которой производится сборка deb пакетов. Задача: подписывать файлы .dsc и .changes при помощи debsign. В сам Jenkins были добавлены credentials с закрытым ключом и парольной фразой к нему. Но непонятно как передать их утилите debsign, чтобы во время подписи пакета она не требовала ручного ввода пароля ключа. Сборка происходит через обычные shell-скрипты (Jenkins Job). Если кто сталкивался с подобным - подскажите, как быть? Перепробовал все, и на данный момент единственное решение, которое ещё можно применить - убрать пароль у закрытого ключа вовсе. Что мне делать не хотелось бы.

 , ,

Sunderland93
()

Обязательно ли пересобирать весь софт с новой версией библиотеки при её обновлении?

Приветствую. Хочу для себя прояснить один момент. Предположим я хочу собрать и установить более новую версию Mesa, 23.1 например. При этом софт в базовой системе (в частности оконный менеджер) собран с более старой. Вопрос - нужно ли его будет пересобрать с новой версией Mesa или же он будет работать и так? То же самое касается libwayland. При этом минимальные версии библиотек, необходимые для сборки этого софта, значительно ниже тех, что есть.

 , ,

Sunderland93
()

Проблема с подключением к LAN на OpenWRT с ZeroTier

Приветствую. Задача: организовать удаленный доступ по SSH к домашней сети через ZeroTier. Дома стоит роутер на OpenWRT с установленным ZeroTier. Маршрутизация настроена согласно мануалам, в контроллере ZeroTier прописан маршрут до ZeroTier IP роутера. При попытке подключиться удаленно с компьютера (также находящегося в сети ZeroTier) подключается только непосредственно к самому роутеру, но ни к одному из устройств за ним (допустим 192.168.1.104). То есть пинг идет только на IP роутера (192.168.1.1). При этом дома у меня статический IP (белый). Подскажите пожалуйста, что не так? Конфигурация следующая:

Router ZT (172.25.180.41), домашняя LAN-сеть - 192.168.1.0/24.

Маршрут на контроллере ZT:

172.25.0.0/16   (LAN)	
192.168.1.0/24   via	172.25.180.41	

Правила фаерволла на роутере:

config zone 'vpn_zone'
	option name 'zerotier'
	option input 'ACCEPT'
	option forward 'ACCEPT'
	option output 'ACCEPT'
	option device 'zt+'
	option masq '1'
	option mtu_fix '1'

config forwarding
	option dest 'zerotier'
	option src 'lan'

config forwarding
	option dest 'lan'
	option src 'zerotier'

 , , , zerotier

Sunderland93
()

Как передать переменные окружения в systemd-xdg-autostart-generator?

Приветствую. Имеется следующая проблема: Sway, запускается небольшим скриптом из /usr/bin, экспортируя при этом ряд переменных окружения, например:

QT_QPA_PLATFORM=wayland
,
QT_QPA_PLATFORMTHEME=qt5ct
и так далее. Все это работает замечательно - приложения, запускаемые вручную, например через Rofi, эти переменные принимают. Однако, если добавить какое-нибудь приложение, например, Telegram, в автозапуск посредством добавления desktop-файла в ~/.config/autostart/, чтобы его прочитал systemd-xdg-autostart-generator и запустил, то эти переменные окружения игнорируются - приложение стартует с дефолтной темой и под Xwayland. Подскажите пожалуйста, каким образом можно передавать эти же переменные окружения приложениям из автозапуска?

 , ,

Sunderland93
()

Как установить значение Qt.DisplayRole для каждой строки в QTreeWidget?

Приветствую. Столкнулся со следующей проблемой. Для примера есть вот такой JSON (settings):

{
  "keyboard-layout": [
    "us",
    "ru"
  ],
  "keyboard-variant": [
    "chr",
    ""
  ]
}

и такой код:

for key, value in layouts:
    if key in settings["keyboard-layout"]:
        self.layout_item = QTreeWidgetItem(self.ui.layouts)
        self.layout_item.setData(0, Qt.DisplayRole, value)
        self.layout_item.setData(0, Qt.UserRole, key)
        self.ui.layouts.addTopLevelItem(self.layout_item)
        for key, values in variants:
            value = values.split(":")[0]
            description = values.split(":")[1]
            if value in self.layout_item.data(0, Qt.UserRole):
                for key in settings["keyboard-variant"]:
                    if key == "":
                        self.layout_item.setData(1, Qt.DisplayRole, "Empty")
                        self.layout_item.setData(1, Qt.UserRole, "")
                    else:
                        self.layout_item.setData(1, Qt.DisplayRole, description)
                        self.layout_item.setData(1, Qt.UserRole, key)

Проблема заключается в следующем: при любом условии значения Qt.DisplayRole и Qt.UserRole устанавливаются на всю колонку целиком, а не на конкретные строки. В результате, если ключ равен "", то значение «Empty» установится на всю колонку, и каждая строка в ней будет с этим значением (а не только та, что нужно). Подскажите, есть ли способ индивидуального назначения itemData для каждой строки?

 , ,

Sunderland93
()

Не удается вывести все значения из словаря на Python

Приветствую. Задача распарсить файл «/usr/share/X11/xkb/rules/base.lst», в котором находится список доступных раскладок клавиатуры, вариантов языка раскладки, моделей клавиатур и т.д. В принципе, получить желаемое удалось, однако при попытке вывести список всех значений из словаря с вариантами, выводятся далеко не все (из 479 выводятся всего 331). Подскажите пожалуйста, где косяк в коде? Может быть есть другой способ парсинга этого файла и разбивки его на списки по раскладкам, вариантом и т.д?

#!/usr/bin/env python3

layouts = {}
options = {}
variants = {}
models = {}
current = None

with open('/usr/share/X11/xkb/rules/base.lst') as f:
    for line in f:
        if len(line) < 2:
            continue
        one, two = line.strip().split(maxsplit=1)
        if one == '!':
            if two == 'layout':
                current = layouts
            elif two == 'option':
                current = options
            elif two == 'variant':
                current = variants
            elif two == 'model':
                current = models
        elif current is not None:
            current[one] = two

for key, values in variants.items():
    print(values)

 ,

Sunderland93
()

Посоветуйте хороший плагин компрессора для микрофона

Приветствую. Хочу немного упростить себе жизнь и свести постобработку голоса в Audacity к минимуму. Решил начать с компрессора. Хотелось бы прикрутить его к Audacity в виде плагина, чтобы он применялся прямо во время записи. Поставил пакет lsp-plugins, но там этих компрессоров десяток, если не больше. Микрофон динамический, Fifine K668, если это имеет значение. Посоветуйте пожалуйста годный плагин компрессора, желательно с минимумом настроек.

 , , ,

Sunderland93
()

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

Приветствую. Ситуация следующая: Raspberry Pi3 B, Ubuntu 22.04, Sway (своя сборка). Сама малинка подключена к телевизору. Все работает прекрасно, но если выключить телек и снова включить, то малина уходит в сон, и при этом ещё и запускается swaylock. Однако и без него срабатывает сон. В конфиге Sway нет каких-то специфичных настроек видеовыхода, все дефолтное. При этом в Raspberry Pi OS такого не наблюдается, выключаешь и включаешь монитор - система остается в прежнем состоянии. Подскажите пожалуйста, куда копать? Может какой-то режим энергосбережения срабатывает? На всякий случай прикладываю системные конфиги малины:

config.txt

[all]
kernel=vmlinuz
cmdline=cmdline.txt
initramfs initrd.img followkernel

[pi4]
max_framebuffers=2
arm_boost=1

[all]
# Enable the audio output, I2C and SPI interfaces on the GPIO header. As these
# parameters related to the base device-tree they must appear *before* any
# other dtoverlay= specification
dtparam=audio=on
dtparam=i2c_arm=on
dtparam=spi=on

# Comment out the following line if the edges of the desktop appear outside
# the edges of your display
disable_overscan=1

# If you have issues with audio, you may try uncommenting the following line
# which forces the HDMI output into HDMI mode instead of DVI (which doesn't
# support audio output)
hdmi_drive=2

[cm4]
# Enable the USB2 outputs on the IO board (assuming your CM4 is plugged into
# such a board)
dtoverlay=dwc2,dr_mode=host

[all]
# Enable the KMS ("full" KMS) graphics overlay, leaving GPU memory as the
# default (the kernel is in control of graphics memory with full KMS)
dtoverlay=vc4-kms-v3d

# Autoload overlays for any recognized cameras or displays that are attached
# to the CSI/DSI ports. Please note this is for libcamera support, *not* for
# the legacy camera stack
camera_auto_detect=1
display_auto_detect=1

# Config settings specific to arm64
arm_64bit=1
dtoverlay=dwc2"

cmdline.txt

zswap.enabled=1 zswap.zpool=z3fold zswap.compressor=lz4 dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 rootwait fixrtc quiet splash 

 , ,

Sunderland93
()

mtools выдает «Disk full» при попытке сборки дистрибутива через live-build

Приветствую. До недавнего времени все прекрасно работало и собиралось. Однако пару дней назад, при попытке сборки Ubuntu Sway Remix (мой кастомный дистрибутив) с помощью этого https://github.com/Ubuntu-Sway/iso-builder на последних этапах, когда создается образ EFI для GRUB, вылетает ошибка «Disk full», при том что места на диске навалом. То же самое происходит со сборкой ElementaryOS (скрипты те же самые, им отписался). Выяснил, что ошибку выдает скрипт, создающийся на одном из этапов. Вот он https://pastebin.com/QxS7Stub и как я понял - виновата строка

mcopy -m -o -i "/grub-efi-temp/boot/grub/efi.img" /grub-efi-temp/EFI/boot/*.efi 	"::EFI/boot"
. Пробовал собрать на трех разных машинах, даже просил других проверить. Везде одно и то же, и никак не могу понять причину. Может кто подсказать в чем проблема?

 , , , ,

Sunderland93
()

Qt Designer: проблема с изменением размера формы

Приветствую. Видимо что-то накосячил с лэйаутами, из-за чего неправильно изменяется размер окна. То есть еняется размер самого окна (в моем случае QMainWindow), но виджеты внутри несжимаемы, и не дают полностью нормально уменьшить размер окна. Подскажите пожалуйста, в чем косяк? Сама форма: https://pastebin.com/xtKv9Fch

 ,

Sunderland93
()

Добавление нескольких значений в QTreeWidgetItem

Приветствую. Нужно добавить несколько элементов из списка в один QTreeWidgetItem, так, чтобы каждый из этих элементов был на отдельной строке. Код следующего вида:

layouts = load_json(layout_list)
        self.layout_item = QTreeWidgetItem(self.ui.layouts)
        for key, values in layouts.items():
            if values == settings["keyboard-layout"]:
                self.layout_item.setData(0, Qt.DisplayRole, key)
                self.layout_item.setData(0, Qt.UserRole, values)
        self.ui.layouts.addTopLevelItem(self.layout_item)

self.ui.layouts

это обычный QTreeWidget, состоящий из двух колонок.

layouts
подгружает json-файл со списком языков раскладки (например «Russian»: «ru»), а в
settings["keyboard-layout"]
находится дефолтное значение вида
"keyboard-layout": [
    "ru",
    "us"
  ],

Если элемент в списке один, то все работает - в QTreeWidget появляется строка Russian, а

self.layouts_item.data(0, Qt.UserRole)
возвращает значение «ru». Но когда элементов несколько, или один, но заключенный в список, в QTreeWidget пустота. Подскажите пожалуйста, как решить эту проблему?

 ,

Sunderland93
()

PySide2 и Qt Designer: обращение к ui напрямую или конвертация в класс Python?

Приветствую. В чем принципиальная разница между использованием формы Qt Designer напрямую, с помощью QUiLoader и её предварительной конвертацией в класс Python? Какие преимущества и недостатки у того или иного способа? На данный момент у меня весь интерфейс описан непосредственно кодом, но хочу понять - насколько оправдано подключение готовой формы Qt Designer и обращение к объектам внутри неё?

 , , ,

Sunderland93
()

Python3/PySide2: соответствие JSON-значения JSON-ключу в QComboBox

Приветствую. Постараюсь объяснить что нужно: имеется ряд QComboBox'ов, заполняемых нужными значениями из общего файла настроек settings (в формате JSON), при изменении выбранного значения в каждом комбобоксе - соответствующий ключ в settings получает выбранное в комбобоксе значение:

      self.repeatDelay = QSpinBox()
        self.repeatDelay.setMaximum(300)
        self.repeatDelay.setValue(settings["keyboard-repeat-delay"])
        self.repeatDelay.valueChanged.connect(self.on_repeat_delay_value_changed)

        self.repatRate = QSpinBox()
        self.repatRate.setMaximum(100)
        self.repatRate.setValue(settings["keyboard-repeat-rate"])
        self.repatRate.valueChanged.connect(self.on_repeat_rate_value_changed)

        self.caps_lock = QComboBox()
        for item in ["disabled", "enabled"]:
            self.caps_lock.addItem(item)
        self.caps_lock.setCurrentText(settings["keyboard-capslock"])
        self.caps_lock.activated.connect(self.on_caps_lock_text_changed)

        self.num_lock = QComboBox()
        for item in ["disabled", "enabled"]:
            self.num_lock.addItem(item)
        self.num_lock.setCurrentText(settings["keyboard-numlock"])
        self.num_lock.activated.connect(self.on_num_lock_text_changed)

        self.formLayout = QFormLayout()

        self.formLayout.addRow(QLabel("Layout:"), self.layoutName)
        self.formLayout.addRow(QLabel("Variant:"), self.variantName)
        self.formLayout.addRow(QLabel("Shortcut:"), self.shortcutName)
        self.formLayout.addRow(QLabel("Repeat delay:"), self.repeatDelay)
        self.formLayout.addRow(QLabel("Repeat rate:"), self.repatRate)
        self.formLayout.addRow(QLabel("CapsLock"), self.caps_lock)
        self.formLayout.addRow(QLabel("NumLock"), self.num_lock)

        self.setLayout(self.formLayout)

    def on_repeat_delay_value_changed(self):
        settings["keyboard-repeat-delay"] = self.repeatDelay.value()

    def on_repeat_rate_value_changed(self):
        settings["keyboard-repeat-rate"] = self.repatRate.value()

    def on_caps_lock_text_changed(self):
        settings["keyboard-capslock"] = self.caps_lock.currentText()

    def on_num_lock_text_changed(self):
        settings["keyboard-numlock"] = self.num_lock.currentText()
Однако, имеются другие комбобоксы, заполняемые данными уже из других json-файлов. В них будут отображаться ключи из этих файлов, и мне нужно получить соответствующее каждому ключу значение, чтобы по аналогичному выше сигналу - прописывать его в нужный ключ уже в settings-файле. Например, в комбобоксе выбран ключ «Language», которому соответствует значение «ru». Как это же значение передать ключу «keyboard-layout» уже в файле settings?

 , , ,

Sunderland93
()

Чтение и замена определенной строки в Python

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

    def applyScheme(self):
        scheme_path = self.schemePath.text()

        with open("/home/sunderland93/config", "r") as f:
            lines = f.readlines()
            for i in range(len(lines)):
                if "set $theme" in lines[i]:
                    line = lines[i].strip()

        new_scheme = line.replace(str(line), 'set $theme ' + str(scheme_path))
        
        with open("/home/sunderland93/config", "r+") as w:
            lines2 = w.read()
            scheme = lines2.replace(str(line), str(new_scheme))
            w.write(scheme)
Как правильно это реализовать?

 ,

Sunderland93
()

Получить список языков для раскладки из Xkbcommon в Python

Приветствую. Пишу небольшую утилиту для легкой настройки раскладки клавиатуры в Sway. На Pyside2. Задумка такова: имеется два QComboBox, в одном должен быть список доступных вариантов языка для раскладки, в другом - комбинации клавиш для переключения языка. После применения настроек они будут записываться в конфиг Sway. Нашел модуль python-xkbcommon, но не понимаю как из него получить список языков для раскладки, чтобы поместить в соответствующий QComboBox. Можете подсказать?

 , , ,

Sunderland93
()

Вопрос по торговым маркам Ubuntu

Приветствую. Как наверно многие знают или слышали, я пилю свой ремикс Убунты, под названием Ubuntu Sway Remix. Однако до меня слишком поздно дошло, что на слово «ubuntu» нужно получать разрешение. Отправив запрос непосредственно в Canonical, ничего внятного не получил. Сказали посмотрят, потом придут ответят. И все же меня интересует: согласно 7 пункту из их условий использования торговой марки, пока дистрибутив разрабатывается на некоммерческой основе, можно использовать любую интеллектуальную собственность Canonical, главное не нарушать их копирайты и явно указать, что торговая марка принадлежит им. Так ли это? Если здесь есть люди, разбирающиеся в вопросах копирайтов, разъясните мне пожалуйста.

 , ,

Sunderland93
()

Прошу помощи в настройке Nginx для Gitea на локальном сервере

Приветствую. В домашней локальной сети есть небольшой сервер, куда я по инструкции с официального сайта установил Gitea. Все работает, все супер. Проблема в следующем. Мой сервер имеет доменное имя debserver.local, но мне требуется чтобы веб-интерфейс Gitea работал на git.debserver.local. Создал по инструкции прокси-конфиг для Nginx со следующим содержимым:

server {
    listen 80;
    server_name git.debserver.local;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

В конфиге Gitea параметры сервера такие:

SSH_DOMAIN       = localhost
DOMAIN           = localhost
HTTP_PORT        = 3000
ROOT_URL         = http://git.debserver.local/

В /etc/hosts добавил запись:

127.0.0.1       localhost
127.0.1.1       debserver.local debserver
127.0.1.1       git.debserver.local

Но по адресу git.debserver.local ничего не работает, страница не загружается. При этом если зайти через просто debserver.local, то интерфейс Gitea открывается, но сверху выходит ошибка

Your ROOT_URL in app.ini is http://git.debserver.local/ but you are visiting http://debserver.local/
You should set ROOT_URL correctly, otherwise the web may not work correctly.
Подскажите пожалуйста, в чем косяк?

 , ,

Sunderland93
()

Docker на домашнем сервере

Приветствую. С Docker имел совсем мало опыта, в основном при сборке пакетов. Имеется небольшой домашний сервер, в данный момент работающий под OpenMediaVault 6. Многие сервисы в нем, например торрентокачалку, или принт-сервер, предлагается устанавливать в виде контейнеров Docker. Хотя все это можно сделать и нативно, штатными средствами Debian. Поэтому вопрос - насколько оправдано использование Docker для подобных целей, какие я получу преимущества, если тот же Qbittorrent будет работать не из нативной deb-версии, а в контейнере? При каких ситуациях раскрываются преимущества Docker?

 , , ,

Sunderland93
()

sed: удаление абзаца со спецсимволами

Приветствую. Имеется текст примерного содержания:

[1][feorgerge,moperbmpotkpoekweifjoweowejf
weofkweopkgfoprkopffwfrgrr_grgkrok_feoko-lpl
fefefkorkogkropekgekropkopm_keof.glg]
[2]fegddgrg
[3]rerg
Как с помощью sed удалить все, что начинается с [1] и заканчивается на ] в первом абзаце, чтобы осталось только [2] и все что далее?

 ,

Sunderland93
()

Видеоплеер с аппаратным ускорением для Raspberry Pi3/4

Приветствую. В каком из существующих видеоплееров есть поддержка аппаратного декодирования видео для Raspberry Pi 3 и 4 (при использовании драйвера KMS)? Интересует именно поддержка в апстриме, без сторонних патчей.

 ,

Sunderland93
()

RSS подписка на новые темы