LINUX.ORG.RU

Сообщения s3rjke

 

Виснет dolphin и софт, использующий файловые диалоги KDE, когда внешний диск занят

Всем привет.

Столкнулся со следующей проблемой — когда какое-либо примонтированное устройство сильно загружено (конкретно вотпрямщас пишу данные на внешний диск через медленный USB2), то начинает виснуть файловый менеджер Dolphin.

И не только он, начинает тупить Kate, огнелис при попытке сохранить файл просто вылетает нафиг (видимо, он под капотом пытается вызвать стандартный диалог выбора файла для сохранения, но что-то у него не получается).

Может ещё на каком-то софте сказывается, пока заметил только эти программы. Если честно, затрудняюсь понять логику толковых парней из Dolphina — с какого перепугу хождение по каталогам системного SSD должно подвешивать программу, когда в совершенно другом процессе (Midnight Commander) идёт работа с примонтированным USB-диском. Ещё подобные косяки могут быть, когда недоступна сетевая samba-шара.

Может кто сталкивался и осилил забороть? Вот в этом топике dolphin обращается к жд при каждом открытии папки поднимался похожий вопрос, удалил своего пользователя из групп cdrom и floppy, не помогло.

 ,

s3rjke
()

Поиск планшета с Линуксом в качестве альтернативы Андроиду

Всем привет.

Есть один рабочий клиент-серверный проект (работает и собирается под онтопик и оффтопик). Возможно, в ближайшее время потребуется делать клиента под переносное устройство (планшет), т.е. понадобится разработчик под Android.

Может быть, кому-либо известны планшеты, использующие в качестве ОС какой-либо дистрибутив Линукс, который поближе к обычному десктопу? Проект у меня на Qt и подпилить его под «обычный Линукс, хоть и на планшете» было бы намного проще и быстрее, чем связываться с Андроидом.

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

 , , ,

s3rjke
()

Doplhin — убрать автовоспроизведение, оставить предпросмотр

Всем привет.

Не могу найти в Дельфине, где можно настроить предпросмотр следующим образом — отображать превьюхи директорий/картинок/видео/etc, но при наведении мышью не пытаться это всё прокручивать (не крутить превьюхи на значке каталога с картинками, не крутить кадры из видоса и т.д.).

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

Может кто подсказать, как бы решить проблему?

 

s3rjke
()

Сериализация/десериализация и экономия на спичках

Всем привет.

Имеется некий клиент-серверный проект. Для обмена данными между клиентом и сервером применяется некий бинарный протокол обмена.

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

Из минусов такого подхода могу отметить, что иногда из-за невнимательности порождаются ошибки, от которых программа может упасть (выход за границы), это в лучшем случае. В худшем выхода не будет (или программа не упадёт), но данные будут не совсем верные и это обнаружится не сразу. Портянки из кучи memcpy и расчёта офсета в какой-то момент надоело писать, зафигачил лямбды, в которые всё это спрятал и код соответствующих методов сократился раза в два, но осадочек всё равно от кода расчёта потребного объёма имеется (может и это как-то можно автоматизировать, позволяют ли средства C++ в рантайме проходить по полям любой структуры?).

В какой-то момент возникает вопрос, а надо ли так запариваться, есть же QDatastream, через который можно делать то же самое, да ещё и без падения программы, если прокосячился и происходит выход за границы. Единственный аргумент против, по сути, большее количество аллокаций при работе через QDatastream, но что значит больше, если у меня размеры структур в пределах нескольких килобайт (и это пара штук, остальные в пределах сотен байт), вроде как и мелочи это. Ну отработает оно не за миллисекунду, а за 10, вроде как и пофигу.

Может кто поделиться опытом, есть ли смысл запариваться с подходом, который применяется сейчас (и потенциально плодит ошибки, которые не всегда сразу видно) или же пусть это дело фигачится через QDatastream, хоть и «медленнее», но зато не валится в случае чего?

 ,

s3rjke
()

Можно ли запускать игры не на основном мониторе?

Всем привет, KDE + wayland, 2 монитора. Можно ли как-то настроить так, чтобы игры запускались не на том мониторе, который выбран основным? Если можно, то где крутить крутилки?

 , , ,

s3rjke
()

KDE: не появляется прозрачный прогрессбар с уровнем громкости при её изменении

Всем привет. Имеется свежеустановленный Debian Testing. После установки KDE был настроен путём отрубания всяких сервисов и прочих эффектов, чтобы не бесили. Поэтому не знаю, проблема появилась в результате моих действий или же «уже была».

Проблема — при изменении уровня громкости не появляется посреди экрана соответствующий полупрозрачный прогрессбар, дающий представление о текущем уровне.

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

KDE Plasma Version 5.23.4
KDE Frameworks Version: 5.88.0
Qt Version: 5.15.2
Kernel Version: 5.15.0-2-amd64
Graphics Platform: X11

 , ,

s3rjke
()

Qt: повторяющиеся блоки switch в слотах для определения типа объекта

Всем привет.

Проблема вроде бы и простая, но не могу придумать нормальное решение.

Есть одна клиент-серверная программа. Есть несколько типов («B», «C», «D»), унаследованных от интерфейса («A»). Объектами этих типов перекидываются между собой всякие классы типа БД-воркера, TCP-сервера, менеджера устройств, etc. Чтобы не загромождать последние кучей сигналов-слотов на каждый тип, в сигналах-слотах передаются смарт-поинтеры на объект типа A, после чего в слоте проверяется, что там за тип вызовом метода а-ля get_type(), указатель приводится к действительному типу и соответствующе обрабатывается. В итоге код загромождается этими switch'ами, что ведёт к понятным проблемам, если понадобится добавить ещё один тип — придётся бегать и править все эти портянки.

Вроде как, можно применить другой способ — перегрузку сигналов/слотов, но тогда для каждого перегруженного сигнала/слота, как я понимаю, надо будет прописывать свой connect, что тоже смотрится не очень. UPD: может нафигачить глобально доступный макрос, который будет вставлять эту кучу коннектов на каждый существующий тип? Тогда достаточно будет модифицировать макрос при введении ещё одного типа.

Хочется, чтобы при добавлении нового типа-наследника «A», места для допиливания были строго локализованы и легко определяемы.

Наверняка есть какое-то решение, до которого я не могу допетрить, может кто подсказать? Или дать ссылку на проэхт, где можно подсмотреть, как делать по красоте?

 

s3rjke
()

QTextDocument (from html): как сделать неразрывный блок картинка+подпись

Всем привет.

Вожусь с простыми отчётиками (печать, экспорт в PDF). Qt 5.12.3. Схема следующая — генерируется html-ка, подпихивается в QTextDocument методом setHtml, заполняются ресурсы (картинки), после чего выводится в файлик или диалог печати.

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

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

 , , ,

s3rjke
()

Прога на Qt + БД SQLite: как сделать бекап из своего софта?

Всем привет.

Есть некая программа-сервис на Qt с базой данных SQLite. Эта программа должна автоматически делать бекапы своей БДшки по шедулеру. Но есть загвоздка, программа ведёт постоянный опрос всяких устройств, реагирует на происходящее с этими устройствами и к программе подключаются АРМы, на которых это происходящее отображается.

Есть ли какие-нибудь вменяемые способы реализовать такое бекапирование? В идеале, только средствами фреймворка, т.е. QtSQL.

Пока навскидку придумалось накостылить класс, который во время копирования файла БД будет у себя складировать все поступающие запросы, а по окончанию процесса их выполнит. Пока БДшка копируется, можно на АРМе крутить юзеру надпись а-ля «внимание, происходит резервное копирование БД» и блокировать интерфейс (со слов «заказчика», вариант допустимый).

 , ,

s3rjke
()

pulseaudio и usb-звуковуха

Всем привет.

Дистрибутив Arch Linux. Звуковая карта Creative SoundBlasterX G6. Подключение по USB.

На Debian'e года 2 назад работало без проблем. На оффтопике тоже всё ок. На arch'e наблюдаются странности. А именно — после того, как комп какое-то время постоит (пока я сплю или на работе, или вообще отошёл на пару часов) может пропасть звук (регулятор громкости kmix тоже перестаёт менять уровень). Причём пропадает он не сразу, подходишь к компу, тыкаешь кнопку воспроизведения — играет секунд 10 после чего пропадает.

Лечится передёргиванием звуковухи по USB. Ниже выдержки ошибок из некоторых журналов.

$ systemctl --user status pulseaudio
апр 05 18:58:04 arch pulseaudio[803]: Failed to set hardware parameters: Protocol error
(куча одинаковых сообщений)

$ journalctl -r
апр 05 18:58:04 arch kernel: usb 5-1: 1:0: usb_set_interface failed (-71)
апр 05 18:58:04 arch pulseaudio[803]: Failed to set hardware parameters: Protocol error
апр 05 18:58:04 arch kernel: usb 5-1: 1:0: usb_set_interface failed (-71)
(куча однотивных сообщений)

# dmesg
[196274.674543] usb 5-1: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0x1100, type = 3
[196274.674792] usb 5-1: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0x1100, type = 3
[196274.675039] usb 5-1: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0xe00, type = 3
[196274.675293] usb 5-1: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0xe00, type = 3
(повторяется несколько раз)

В выхлопе lsusb звуковая карта на месте. Автосаспенд вроде как отключен.

Частота возникновения проблемы плавающая в зависимости от версии pulseaudio (видимо, они там что-то по-разному ломают, поскольку сейчас проблема возникает в 90% случаев, но на каких-то версиях она возникала раз в несколько дней).

Куда вообще рыть, чтобы понять, что происходит и как вылечить?

 ,

s3rjke
()

Собрать программу под другой дистрибутив

Всем привет.

Есть некая программа (без GUI) на Qt. Некие ребята попросили программу себе.

Запросил версию системы вплоть до списка установленных пакетов с их версиями.

Я так понимаю, мне следует сделать виртуалку, поставить туда тот же дистр, что и у ребят, установить доступный в репах Qt и осуществить сборку, после чего отправить получившиеся бинарники?

Или может такие вещи делаются проще/по-другому?

Запрос разовый, поэтому заморачиваться с опакечиванием в .deb смысла не вижу.

 

s3rjke
()

Сборка mysql-плагина для Qt5.12.3

Всем привет.

Не могу разобраться со сборкой сабжа.

Инструкции на сайте Qt предельно понятные:

You need the MySQL / MariaDB header files, as well as the shared library libmysqlclient.so / libmariadb.so. Depending on your Linux distribution, you may need to install a package which is usually called "mysql-devel" or "mariadb-devel".

Tell qmake where to find the MySQL / MariaDB header files and shared libraries (here it is assumed that MySQL / MariaDB is installed in /usr/local) and run make:
cd $QTDIR/qtbase/src/plugins/sqldrivers
qmake -- MYSQL_PREFIX=/usr/local
make sub-mysql

Скачал сорцы mariadb10.3, собрал. Закинул в одну директорию хедеры из libmariadb/include (содержит mysql.h и прочие) и получившиеся файлы библиотек .so и .a. Эту директорию указываю справа от MYSQL_PREFIX=, qmake вызываю от свежеустановленного Qt5.12.3.

Получается следующий вывод:

Running configuration tests...
Done running configuration tests.

Configure summary:

Qt Sql Drivers:
  DB2 (IBM) .............................. no
  InterBase .............................. no
  MySql .................................. no
  OCI (Oracle) ........................... no
  ODBC ................................... no
  PostgreSQL ............................. no
  SQLite2 ................................ no
  SQLite ................................. yes
    Using system provided SQLite ......... no
  TDS (Sybase) ........................... no

Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into '/home/user/software/qt/Qt5.12.3/5.12.3/gcc_64'.

Prior to reconfiguration, make sure you remove any leftovers from
the previous build.

Далее по мануалу вызываю make sub-mysql, получая вывод make: *** Нет правила для сборки цели «sub-mysql». Останов.

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

 , ,

s3rjke
()

Скачет время в ОС

Всем привет.

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

Настройки timedatectl:

Time zone: UTC (UTC, +0000)
Network time on: no
NTP synchronized: no
RTZ in local TZ: no

С какого-то перепугу в значения Local time и Universal time выставляется время на 3 часа меньшее, чем время в биосе. Команда hwclock -s помогает до перезагрузки. После перезагрузки время в указанных полях опять прыгает на 3 часа назад.

В файлах /var/log/messages и /var/log/syslog встречаются сообщения об установке системного времени в правильное значение.

Не понимаю, что происходит, может кто сталкивался? Куда вообще смотреть, чтобы понять, какая программа портит системное время?

 ,

s3rjke
()

Не включается экран при нажатии на тачскрин

Всем привет. Имеется пальцетыкательный монитор. Подключение к компьютеру через VGA и USB. Тачскрин нормально работает из коробки. Система Astra Linux.

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

Может кто сталкивался?

Если запустить xinput --test 13, то исправно пишет в консольку всякое при нажатиях тачскрина, пока монитор бодрствует. Как только система гасит экран по бездействию, сколько ни тыкай, ничего не пишет.

xinput --list показывает некий ILITEK ILITEK-TP.

 ,

s3rjke
()

Заканчивается место в корне при запуске игры через lutris -> steam

Всем привет. Столкнулся с такой фигнёй.

Установил через установочный скрипт lutris’a игру Tree Of Savior. При запуске игры через интерфейс lutris’a сперва запускается steam и оттуда уже сама игра.

Оказалось, что после запуска начинает куда-то пропадать свободное место в корневом разделе (он небольшой, 23 Гб, чисто под систему и программки из репозиториев, хомяк на отдельном разделе).

В итоге через некоторое время игры заканчивается всё свободное место в корне (сейчас там свободно 8 с небольшим гигов), согласно показаниям df. На саму игру не влияет, но, как нетрудно догадаться, влияет на некоторые другие программы. Выход из игры ничего не даёт, надо прибить сам steam, через который она запущена.

Что именно происходит, пока не понял, поскольку попытки посмотреть, какая директория пухнет после запуска этого добра, ни к чему не привели – утилита ncdu (du с консольной графикой) показывает, что дисковое пространство, занятое директориями в корне никак не изменяется до и после запуска.

Сталкивался кто-нибудь? Я, если честно, даже не знаю, куда рыть – место кончается, а мне показывает, что размер директорий не поменялся, может можно как-то по-другому это отследить?

Игра запускается из-под юзера. Дистр Debian testing, раньше был stable, там такой фигни вроде бы не происходило.

 ,

s3rjke
()

Железяка для управляемого звукового оповещения

Всем привет. Есть несколько помещений. В помещениях установлены динамики. Задача состоит в том, чтобы транслировать определённые сообщения через определённые динамики. Динамики пока абстрактные, какие надо будет, такие и будут приобретены.

Т.е. нужна некая железяка, с которой я бы мог пообщаться из своего софта, попросив железяку проиграть «вот это сообщение» на «вот этом канале». Ещё нужен режим ручного управления, чтобы оператор тоже при необходимости мог сообщить что-либо в систему звукового оповещения.

Интерфейс желательно Ethernet, хотя USB, наверное, тоже приемлем.

Существуют ли такие железки в природе, если да, то как называются, чтобы гуглить? Посоветуйте чего-нибудь.

 ,

s3rjke
()

KDE: после переключения с карты nvidia на встройку intel, исчезли настройки ДЕ

Всем привет. Старая дискретная карточка nvidia начала сильно шуметь ушатанным вентилятором и я решил перекинуть мониторы на встройку intel (Intel HD Graphics 530), а старую карту убрать. После удаления пакетов nvidia и пары перезагрузок вроде заработало. Но. После входа в систему меня встречает абсолютно пустое пространство (обоины установились какие-то дефолтно-цветастые). Т.е. все панели задач и значков куда-то исчезли. Попытки добавить панель через контекстное меню при клике по рабочему столу ни к чему не приводят. Окна очень странно себя ведут — не работает перетаскивание по заголовку окна, зато работает через зажатый Alt + удержание зажатой ЛКМ.

В общем, что-то поломалось, а что именно, хрен его знает, может кто сталкивался?

Debian
KDE Plasma Version 5.8.6
KDE Frameworks Version 5.28.0
Qt Version 5.7.1

 ,

s3rjke
()

Debugging with QtCreator: содержимое this недоступно

Привет, эксперты. Столкнулся с такой проблемой. Есть класс, одним из его полей является структура. У структуры есть методы, которые в ходе работы программы вызываются.

При отладке, если поставить брейкпоинт внутри метода структуры, при остановке программы в этом месте, в отладочной сводке (в правой части IDE) можно посмотреть только значения локальных переменных текущего метода. Содержимое указателя this (т.е. указателя на упомянутый класс) помечено как not accessible.

Улетел за полстраны, захватив с собой кое-какой код, который хотел поковырять, водрузил фреймворк и IDE на доступный комп, а тут такая засада с отладкой. На рабочем компе отладчик всё прекрасно показывал, такой фигни вообще никогда не возникало.

Как бы это дело починить?

QtCreator 4.9.2, Qt 5.12.2, g++ 8.3.0, gdb 8.2.91

 , ,

s3rjke
()

Qt: константные ссылки в сигналах и слотах

Привет, эксперты. Есть Один Пример (из официальной документации Qt, по работе с последовательным портом), в котором используется сабж.

Линки: .h, .cpp.

Кусок из .h:

signals:
	void response(const QString &s);
	void error(const QString &s);
	void timeout(const QString &s);
Кусок из .cpp:
if (serial.waitForBytesWritten(m_waitTimeout)) {
	if (serial.waitForReadyRead(currentWaitTimeout)) {
		QByteArray responseData = serial.readAll();
		while (serial.waitForReadyRead(10))
			responseData += serial.readAll();
			const QString response = QString::fromUtf8(responseData);
			emit this->response(response);		// СИГНАЛ 1
	} else {
		emit timeout(tr("Wait read response timeout %1")
			.arg(QTime::currentTime().toString()));	// СИГНАЛ 2
	}
} else {
	emit timeout(tr("Wait write request timeout %1")
		.arg(QTime::currentTime().toString()));		// СИГНАЛ 3
}

Собственно, вопрос, разве объекты, ссылки на которые передаются сигналами 1-2-3 не должны быть незамедлительно уничтожены после emit'ов? Поскольку процитированный кусок кода, вроде как, выполняется в отдельном потоке, то будет использовано соединение Qt::QueuedConnection, поэтому слот приемника (receiver) формально может выполниться тогда, когда объекты, с которыми связаны ссылки, будут уже уничтожены.

Или нет?

 ,

s3rjke
()

Дизайн числовых полей ввода

Привет, подскажите, как правильно делать числовые формы ввода. Конкретно, интересют две вещи:

  • где располагать единицу измерения
  • по какому краю выравнивать названия полей

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

  • Var 1 — не понравился коллегам (самый ацтойный, по их мнению)
  • Var 2 — немного напрягает меня, т.к. буковки слегка замыливают циферки с точки зрения парсинга (может это только у меня так?)
  • Var 3 — единицу измерения сложнее вычленить визуально

Беглое гугление толком ответов не дало. Как делают такие формы правильные пацаны?

 ,

s3rjke
()

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