LINUX.ORG.RU

Сообщения hobbit

 

Стиль отображения в Roundcube

 ,

Привет, ЛОР.

Недавно я перенёс свою почту на другой VDS. Сказать, что новый вид Roundcube мне сильно не понравился – ничего не сказать.

Ну ладно. Решил посмотреть, можно ли его как-то потюнить. Во всех руководствах написано, что Roundcube поддерживает разные стили оформления, и даже на официальной странице со скриншотами есть примеры, тема Larry сильно напоминает старую и меня бы вполне устроила…

Но почему-то у меня в настройках такого не наблюдается. По идее это должно быть Settings -> Preferences -> User interface. Но я там наблюдаю только выбор языка и несколько галочек («Pretty dates» я, разумеется, тут же злобно отключил, на мой взгляд, все эти «пн» вместо даты и времени совсем не Pretty).

Версии пакетов:

ii  roundcube                        1.6.9-70-deb11                        all          skinnable AJAX based webmail solution for IMAP servers - metapackage
ii  roundcube-core                   1.6.9-70-deb11                        all          skinnable AJAX based webmail solution for IMAP servers
ii  roundcube-mysql                  1.6.9-70-deb11                        all          metapackage providing MySQL dependencies for RoundCube
ii  roundcube-plugins                1.6.9-70-deb11                        all          skinnable AJAX based webmail solution for IMAP servers - plugins
ii  roundcube-plugins-extra          1.4.10+1-3                            all          skinnable AJAX based webmail solution - extra plugins

Все пакеты, кроме последнего, были предустановлены на VDS. Последний я сам поставил с горя (разумеется, из репы, через apt-get), но это не помогло (и номер версии намекает, что с ним не всё так просто).

Куда копать?

P.S. додумался сделать обновление системы из реп, перегрузил сервер. Roundcube минорно обновился до 1.6.9-79, но моей беде это не помогло…

P.P.S. Оказалось, у меня сборка Roundcube от ispmanager. Что с этим делать, пока не решил, второй переезд подряд затевать сразу как-то неохота. Интересно, параллельно с ней «ванильный» поставить получится?..

hobbit
()

Сюрпризы сборки Qt 5.15 на GCC 15 (Qt5 EOL Official Edition посвящается...)

 , ,

Привет, ЛОР.

Пытаюсь собрать Qt 5.15.4 с GCC 15.1.1. Часть граблей знакомые, обошёл. Но выявились новые. Причём ругань не на сам кутешный файл, а на заголовочник из ICU, который у меня в системе стоит. Вызывает его подпроект в qtlocation/src/3rdparty/mapbox-gl-native.

Текст ошибки (даже двух, но вторая, вероятно, наведённая):

/usr/include/unicode/localpointer.h:561:26: ошибка: «auto» параметр недопустим в данном контексте
  561 | template <typename Type, auto closeFunction>
      |                          ^~~~
/usr/include/unicode/localpointer.h:573:76: ошибка: некорректный аргумент шаблона 2 [-Wtemplate-body]
  573 |     explicit LocalOpenPointer(std::unique_ptr<Type, decltype(closeFunction)> &&p)

Кусок самого localpointer.h:

template <typename Type, auto closeFunction>
class LocalOpenPointer : public LocalPointerBase<Type> {
    using LocalPointerBase<Type>::ptr;
public:

Подозреваю, конечно, что компилятор шарашит по либо слишком старому, либо слишком новому стандарту C++. В файле mapbox-gl-native.pro на себя обращают внимание строки

CONFIG += qt c++14 exceptions warn_off staticlib object_parallel_to_source
CONFIG -= c++1z

А рядом лежит свеженький Makefile, который qmake из этого проекта сгенерировала, и там в переменной CXXFLAGS присутствует -std=c++1y.

Как связать концы этого клубка?

hobbit
()

Запуск sberbankPDF2Excel.py в Linux: благодарность micronekodesu и ещё раз о Питоне

 , ,

Привет, ЛОР.

С некоторых пор Сбербанк-онлайн выпилил «физикам» возможность сохранения выписок в структурированных форматах, оставил только PDF. Разработчик, публикующийся на Гитхабе под именем Ev2geny, создал программу на Питоне, конвертирующую этот PDF в форматы xlsx и csv. К сожалению, внятную сборку он сделал только для Windows, а инструкция по запуску под линуксом у меня не заработала.

К счастью, @micronekodesu откликнулся на мою проблему и написал мини-инструкцию по запуску sberbankPDF2Excel.py в виртуальном окружении. Я её протестировал – работает, в CSV сохраняет.

Однако на вопрос по ссылке (заданный в контексте дискуссии о лучшем способе распространения программ на Питоне)

просто из-за того что я питоняша у меня не возникает проблем?

Мой ответ – «видимо, да». Я бы без инструкции долго блуждал в трёх соснах. И мне кажется, что сишную программу, запакованную в AppImage, запустить реально проще, чем вот это вот. Не только для «простого пользователя», но и для продвинутого.

Ещё раз спасибо @micronekodesu! Ну и автору программы, конечно, хотя я не уверен, что он читает ЛОР.

P.S. Та тема уже в архиве и отвечать там нельзя. Иначе я бы просто оставил там комментарий. С другой стороны, я уверен, что я не единственный линуксоид, пользующийся Сбербанком, поэтому дополнительный пиар способу обхода его закидонов :) не помешает.

P.P.S Под firefox Сбербанк-онлайн создаёт битые PDF. Под chromium всё прекрасно работает. Это замечание, конечно, уже не по тематике нашего форума, хотя… как мы радовались когда-то, что монополии IE пришёл конец… Эхъ…

hobbit
()

Потыкайте мой AppImage, пожалуйста

 ,

Привет, ЛОР.

Вооружившись appimagetool и башем, я склепал AppImage для DoubleContact с условным номером версии 0.2.5beta2. Собирал под Ubuntu 18.04, по идее на практически любом x86_64-дистрибутиве моложе 7 лет должно работать. Кому интересен мой проект – просьба потыкать и отписаться, что за дистрибутив и каков результат. В отличие от предыдущей статической сборки, рут не требуется.

Не получилось добавить в программу Appstream. Проблема очень похожа на описанную в крике души по ссылке: сначала она предупреждает, что Id должен быть в формате обратного доменного имени, когда я делаю его таким, склоняет переименовать сам файл, когда я это делаю, не видит файл метаданных вообще. Если кто-то знает, что с этим делать – добро пожаловать в комментарии. Но на работоспособность самой программы это не влияет, только на предупреждение при вызове appimagetool.

Скачать с гитхаба

Основная тема по DoubleContact

hobbit
()

Можно ли определить (хотя бы примерно) искажённый байт в JPEG?

 , ,

Привет, ЛОР.

Возникла нетривиальная задачка уровня «шлакоблокунь». :) Есть кучка JPEG-файлов, вытащенных из MJPEG-потока с довольно большим количеством битых участков. Оригинальный поток тоже имеется и связать позиции файлов с позицией потока я могу. Нужно определить закономерность, с которой возникают сбои.

Со сбоями в растровых изображениях я сталкиваюсь не в первый раз, даже написал простенький алгоритм, который на раскодированном битмапе считает разности цветовых компонентов и определяет строку, с которой начался искажённый фрагмент. Немножко усложнив алгоритм, можно и пиксель определить (хотя там уже есть нюансы). Так вот, а получится ли, зная X и Y, определить, какой байт в JPEG-е виновен в его подтверждении?

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

Битые байты, разумеется, могут попадать не только на «количественные» поля. Но если в сигнатуре «JFIF» или «AVI1» вместо I будет Q или что-то вообще нечитаемое – тут сразу понятно, кто виноват. Если в таблице смещений попадётся смещение, выкидывающее за пределы файла – тоже. К сожалению, не все искажения такие легко определяемые.

Уже вижу, как мне пишут про проблему XY. Да, методически я занимаюсь не совсем правильными вещами, надо искать сам источник искажений. Но доступ к нему у меня не слишком регулярный, а вот анализ потока помог бы понять, периодические эти искажения или нет? И если да, то с каким периодом? Байты только искажаются или добавляются/пропадают? В зависимости от этого уже можно определиться, кого пинать – канал связи, сервисы, через которые этот поток проходил до меня и др.

hobbit
()

Как правильно включить поддержку ICU в SQLite

 , ,

Привет, ЛОР.

Столкнулся с тем, что в SQLite не работают upper() и прочие регистрозависимые строковые функции для нелатинских символов. Долго искал, думал, я дурак, но оказывается, это поведение по умолчанию, давным-давно и много где описанное.

Почитал. В статье на Хабре предлагают либо пересобирать SQLite с включённым SQLITE_ENABLE_ICU, либо загрузить расширение. Ну, думаю, пересобрать и захламить систему я всегда успею, давай попробуем сначала второй путь.

Ссылка из статьи не работает, но в актуальных исходниках SQLite искомый icu.c находится без труда. Качаю. Собираю. Получаю libsqliteicu.so. Гружу его из SQLite CLI – LIKE и upper() начинают прекрасно работать.

Теперь пытаюсь подгрузить это в своей кутешной программе. Сначала вызываю sqlite3_enable_load_extension(), потом sqlite3_load_extension(). Первое проходит успешно, во втором получаю ошибку:

/usr/lib/libsqliteicu.so: undefined symbol: sqlite3_sqliteicu_init

Лезу в исходник: там вместо указанной присутствует функция sqlite3_icu_init(). Ну, хитрожопый я, конечно же, попробовал её переименовать. Добился только того, что текст ошибки поменялся на «error during initialization:».

По совету @utf8nowhere стал указывать другое имя точки входа третьим параметром sqlite3_load_extension() – тот же самый error during. Двоеточие намекает, конечно, что у ошибки должна быть дополнительная расшифровка, но где её искать, не очень понятно.

Подобного рода разночтения, конечно, первым делом наводят на мысль о несовместимости версий. Начинаю потрошить кутешный драйвер БД. Иду в /usr/lib/qt/plugins/sqldrivers (у меня он соответствует Qt5) и делаю ldd libqsqlite.so. Получаю, в числе прочего:

libsqlite3.so.0 => /usr/lib/libsqlite3.so.0 (0x0000728bea28f000)

В свою очередь, libsqlite3.so.0 является симлинком для libsqlite3.so.3.49.1. То есть «библиотечная» SQLite той же версии, что и sqlite3 CLI. Но во втором загрузка расширения работает, а в первой нет.

Куда копать? Можно, конечно, вернуться к варианту с пересборкой, но там свои вопросы будут…

P.S. Попробовал вариант с пересборкой, теперь кутешный драйвер верещит «Driver not loaded», а это может означать что угодно…

Обновление: как выяснил @utf8nowhere, загрузка расширения не работает, если есть открытые запросы к БД. Необходимо либо вызвать у них метод finish(), либо проследить, чтобы соответствующие объекты завершили работу (вызван деструктор).

hobbit
()

В mcedit сломались неюникодные кодировки

 ,

Привет, ЛОР.

С обновлением системы прилетел mc 4.8.33. И при попытке отредактировать файлы в кодировках, отличных от UTF-8, часть заглавных букв в mcedit начинает отображаться точками. Грешил на шрифт – но mcview тот же самый текст отображает нормально, проблема именно при редактировании, когда я начинаю переключаться между кодировками в mcedit по Alt+E.

К примеру, в koi8-r сбивается отображение заглавных букв с А по П, в cp1251 – с А по О.

Скорее всего, придётся засучить рукава и написать в багтрекер, но прежде чем этим заниматься, я хочу понять, есть ли такая проблема у кого-нибудь на ЛОРе, и вообще, проблема ли это самого mc или какой-нибудь используемой библиотек.

Система Manjaro KDE с актуальными обновлениями, mc запускается из konsole. Шрифт – Terminus 12 (но как я уже сказал, mcview он нормально работать из той же konsole не мешает).

P.S. Я обычно не модерирую темы, которые сам создаю. Но если кто-то очень захочет подкинуть флуда на тему «азаза, какие ещё неюникодные кодировки в 2025 году» – буду сносить не глядя, по 17 пункту. Если вам лично не нужно – проходите мимо. А тут разговор про штатную и для многих очень удобную функцию mcedit.

hobbit
()

Manjaro затыкается на обновлении

 , ,

Привет, ЛОР.

В отличие от истории двухлетней давности, графическая обновлялка, она же pamac-manager, обещает мне 7 ГБ обновлений. Даю добро, получаю:

не удалось удовлетворить зависимости:
- невозможно удовлетворить зависимость «libcap=2.71», необходимую для lib32-libcap
- невозможно удовлетворить зависимость «libffi=3.4.6», необходимую для lib32-libffi
- невозможно удовлетворить зависимость «pcre2=10.44», необходимую для lib32-pcre2
- невозможно удовлетворить зависимость «expat=2.6.4», необходимую для lib32-expat
- удаление qxlsx-qt6 нарушает зависимость «qxlsx-qt6», необходимую для stellarium

Библиотеки серьёзные, от lib32-expat, в частности, судя по выхлопу pactree -r, зависят steam и blender.

Ладно, запускаю sudo pacman -Syu:

 core is up to date
 extra is up to date
 community.db failed to download
ошибка: не удалось получить файл 'community.db' из mirror.truenetwork.ru : The requested URL returned error: 404
ошибка: не удалось получить файл 'community.db' из mirror.kamtv.ru : The requested URL returned error: 404
ошибка: failed to synchronize all databases (не удалось получить некоторые файлы)

После этого я уже начал искать в гугле упоминание проблем с community.db, и наткнувшись на эту тему, понял, что его просто объединили с extra.db.

В теме по ссылке много буков про то, как отредактировать /etc/pacman.conf разными редакторами, удалив оттуда секцию [community], но я просто-напросто обнаружил у себя в /etc файл pacman.conf.pacnew, который специально для нас, козлов, подготовили на замену оригинальному. Вот интересно, он должен был сам заменить оригинальный, но что-то не сработало? Или это принципиально ручная операция? Ладно, переименовываю его, то же самое проделываю с pacman-mirrors.conf. Ругань поменялась, теперь козлом отпущения оказался stellarium. С болью в сердце удаляю его, запускаю pamac-manager… и обновление, наконец, пошло.

Закончится – отпишусь, мало ли, может, не я один такой.

hobbit
()

Карта указателей, ссылок и for по диапазону

 , ,

Привет, ЛОР.

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

Попробовал примерно так:

struct AnyS {
    int a, b, c;
};

std::list<AnyS> anyList;
std::map<int, AnyS&> refs0, refs1;

    AnyS any;
    any.a = 0;
    anyList.push_back(any);

    int i=0;
    for (AnyS& yaAny: anyList) {
        if (yaAny.a==0)
            refs0[i] = yaAny;
        // Тут м.б. рациональнее было бы сделать switch, но не суть, это демо
        i++;
    }

На строке с присвоением получаю ошибку

/usr/include/c++/11/tuple:1824: ошибка: value-initialization of reference type ‘AnyS&’

Т.е. оно пытается присваивать по значению, хотя я хотел явно противоположного, и у него это не получается.

А что самое смешное? А то, что если я отказываюсь от ссылок и работаю по старинке с указателями, то всё прекрасно работает! Примерно так:

// ...
std::map<int, AnyS*> refs0, refs1;
//...
    for (AnyS& yaAny: anyList) {
        if (yaAny.a==0)
            refs0[i] = &yaAny;
        i++;
    }

Но нельзя ли всё-таки как-то заставить работать вариант со ссылками? Они, типа, безопаснее, и красивее и вообще сейчас считается, что работа с указателями это фи.

Я, конечно, догадываюсь, что я как-то неправильно использую range-based for… но вот как правильно…

P.S. GCC 11.3.1, если это важно.

hobbit
()

Хочу Live Flash с двумя разделами

 ,

Привет, ЛОР.

Я вот о чём задумался. Часто, загружаясь с лайва, надо иметь возможность что-то записать с компа на сменный носитель. Понятно, можно воткнуть две флешки в разные порты и смонтировать вторую руками.

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

Интересно, такое кто-нибудь уже сделал?

hobbit
()

А как комфортно работать со строками в современном C++?

 , ,

Привет, ЛОР.

Старый добрый std::string, как мы знаем, это по сути char* на стероидах. А во многих случаях надо работать со строками именно как со строками текста.

К примеру, в библиотеке QtCore, входящей во фреймворк Qt, есть класс QString. Её часто ругают за изобретение велосипедов. Но именно благодаря этой «фабрике велосипедов» я могу написать, например, так:

QString s;
QStringList sl;
...
if (sl.contains(s, Qt::CaseInsensitive)) {
    ...
}

И оно мне проверит наличие строки в списке, причём регистронечувствительным (второй параметр) способом. И не только для латинских символов. То есть если в списке есть «Капибара», в строке подойдёт как «Капибара», так и «капибара». Ещё есть split(), join() и дофига полезного.

А как такое сделать без QtCore, на голом STL? В C++20 появился некий std::u8string, он мне поможет, например?

hobbit
()

Как распарсить версию ffmpeg из программы

 ,

Привет, ЛОР.

Не секрет, что в библиотеках ffmpeg неоднократно ломали API. Поэтому важно проверять их версию на этапе компиляции.

В libavutil есть ffversion.h. Однако вместо понятных XXX_VER_MAJOR и XXX_VER_MINOR там определяется строка. Например, для старенького ffmpeg 3.2 написано:

#define FFMPEG_VERSION "3.2

А для более новых, так и вообще с буковками:

#define FFMPEG_VERSION "n4.4.5"

или

#define FFMPEG_VERSION "n7.1"

Как вы думаете, как в таких условиях написать #if для препроцессора, что код ниже действителен, например, для ffmpeg 4 и выше? Например, в совсем древних ffmpeg-ах была функция avcodec_register_all(), потом её выкинули, а потом выкинули и av_register_all(). И это только одна из «мутаций».

Обновление: всем спасибо за ответы, видимо, самый надёжный метод – проверять версию не FFMPEG в целом, а библиотек из его состава. Для этого соответствующие определения есть, см. комментарий ниже.

FFMPEG API changes log

hobbit
()

Фиксированное число знаков после запятой

 ,

Проблема решена, дело было в моей невнимательности (см. ниже)

Привет, ЛОР.

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

В официальной доке SQLite написано:

The format(FORMAT,…) SQL function works like the sqlite3_mprintf() C-language function and the printf() function from the standard C library.

Но при этом в сишечке я могу написать:

    printf("%0.2f\n", 33.35);
    printf("%0.2f\n", 44.);

И первое число выведется как 33.35, а второе как 44.00. Такой результат меня устраивает, и что-то подобное я хотел получить в SQLite.

Авотфиг.

select format(magicnumber/100.00, '%0.2f') from magictable;

(где magicnumber имеет тип integer) возвращает результат с ОДНИМ нулём. Т.е. если magicnumber равен 3845, то всё в порядке, в выводе будет 38.45. А вот если он равен 4200, то вывод даст 42.0 (один нуль вместо двух).

Ради справедливости надо отметить, что эксперимент у меня не совсем чистый, я SQLite дёргаю через QtSql. Но поскольку результатом format() уже является строка, я полагаю, что на результат это влиять не должно. Совсем чистым экспериментом было бы написать тестовую программу на голом libsqlite3-dev, но боюсь, чем колхозить такой тест, я скорее плюну и сделаю форматирование не в SQL а уже на стороне плюсов, в своём наследнике QSqlQueryModel – там понятно, как это делать, и там всё работает.

Но хочется всё-таки попробовать на стороне SQL… Куда копать?

lib32-sqlite 3.47.2-1
sqlite 3.47.2-1

Обновление Спасибо, оказалось, я тупо перепутал местами аргументы функции.

hobbit
()

Можно ли задать компилятор при сборке через qmake?

 , ,

Привет, ЛОР.

Есть проект на основе qmake, который должен уметь собираться как в clang, так и в g++.

По умолчанию qmake генерирует Makefile для g++, в дебиане, на котором идёт сборка, оба компилятора присутствуют. При сборке в Qt Creator я могу выбрать «комплект» из версии Qt и компилятора. Это работает.

Но хотелось бы получить такую же гибкость и при сборке из командной строки. Версия Qt определяется самим запускаемым qmake, тут понятно. А вот как задать компилятор? Может, ключом qmake (я такого не нашёл, но возможно, плохо искал)? Или конфиг какой надо править?..

hobbit
()

Драма со шрифтами из 2020 года: было ли продолжение?

 

Наткнулся тут на тему из 2020 года «Библиотека Pango отказалась от мягкого сглаживания шрифтов (hintfull)». На опеннете тоже обсуждали.

Кто-нибудь следил за дальнейшем развитием темы? Чем кончилось? Мониторы с 1920x1080 надо закапывать или?..

hobbit
()

Как собрать сторонний Kotlin-проект для Андроида

 , ,

Привет, ЛОР.

На гитхабе есть программа Simple-Contacts. Написана на Котлине. Инструкция по сборке отсутствует. Ну или слепой я её не нашёл.

Насколько я понимаю, для сборки нужны как минимум gradle и компилятор самого Kotlin. Что ещё, какие-то библиотеки? Какие телодвижения надо предпринять, чтобы получить из этого APK-файл? Как узнать диапазон поддерживаемых версий Андроида?

hobbit
()

Импорт файлов mbox в Thunderbird

 , , ,

Привет, ЛОР.

Вчера понадобилось прочитать файл mbox от Roundcube на локальной машине. Ну я беззаботно запустил Thunderbird, сейчас, думаю, загружу.

Ищу и не нахожу. Адресные книги можно, календари можно, чужие профили от того же Thunderbird можно, даже зазипованные. А наистандартнейший юниксовый мейлбокс – хренушки.

Минут 20 с этим воевал, потом решил таки загуглить. И даже результат гуглинга правильно трактовал не сразу. Оказывается, чтобы в заслуженном и в целом очень хорошем почтовом клиенте в 2024 году прочитать mailbox-файл, формату которого фиг знает сколько лет, надо УСТАНАВЛИВАТЬ РАСШИРЕНИЕ.

У меня нет слов.

Впрочем, после того, как я это осознал, всё остальное прошло как по маслу. Для тех, кто будет прыгать по тем же граблям – расширение называется ImportExportTools NG (для сильно старых версий Thunderbird то же самое, но без NG), есть в базе addons.thunderbird.net.

Тему создал для тех, кто будет мучиться так же, как я, наивно полагая, что это элементарная встроенная функция.

hobbit
()

Статическая сборка Qt5 и шрифты

 ,

Привет, ЛОР.

Я сейчас осваиваю статическую сборку Qt5 для линукса. (Для Windows я эту задачу решил давно, в линуксе лично меня устраивает Qt из репозиториев, но понятно, что для пользователей произвольного дистрибутива, хотя бы в рамках x86_64, нужна универсальная сборка.)

Сборку веду из тарболла qt-everywhere-src-5.12.12.tar.xz под старенькой Ubuntu 18.04. Почему именно 5.12, а не 5.15 – в 5.15 поменялись ключи для включения libxcb в сборку (если её не включать, Qt при запуске прикладной программы будет искать xcb-плагин и разумеется, обломается), и новые ключи у меня пока не заработали.

Кроме очевидного build-essential, я доустановил (как раз для xcb) пакеты libx11-*, libxcb-*, libxkbcommon-dev и libxkbcommon-x11-dev, а также (на будущее, для OpenSSL) libssl-dev. Из конфига исключены QtWebEngine, QML и openGL (но QML и openGL я планирую вернуть потом).

Мой текущий configure для Qt:

QTDIR=/opt/Qt/5.12.12.st

sudo mkdir -p ${QTDIR}

./configure -opensource -confirm-license -platform linux-g++ -static -release \
 -skip qtwebengine -no-opengl \
 -qt-xcb -I /usr/include/xcb/ -L /usr/lib/x86_64-linux/gnu/ \
 -qt-zlib -qt-libpng -qt-libjpeg -openssl-linked -nomake examples -prefix ${QTDIR}

Далее понятно, make и sudo make install. Сборка прошла успешно. Далее собираю с этим Qt DoubleContact (пришлось немного пропатчить исходники, чтобы алгоритм прицепливания встроенного в Qt zlib-а работал). Полученный бинарник я вытаскиваю из виртуалки на хост (Manjaro KDE), запускаю. Открывается окно с табличками без единого символа. При этом видно, что логика программы работает, окна вызываются (если помнишь, куда тыкать).

В konsole ругань следующая:

QFontDatabase: Cannot find font directory /opt/Qt/5.12.12.st/lib/fonts.
Note that Qt no longer ships fonts. Deploy some (from https://dejavu-fonts.github.io/ for example) or switch to fontconfig.

Вопрос 1. Я правильно понимаю, что Qt именно в этом каталоге и собирается шрифты искать во время выполнения (судя по тому, что путь оказывается захардкожен в бинарник уже моей программы)? Если так, то это не то, что мне надо.

Исходя из этого предположения, я поискал другие пути. В принципе, через QFontDatabase::addApplicationFont() и QApplication::setFont() можно добавить любой нужный шрифт и даже добавить его в ресурсы программы. Программа при этом начинает показывать строки нормально… если ограничиваться одним шрифтом. Но у меня, например, в программе есть ещё и кутешный диалог выбора шрифтов для таблиц, и он при таком решении показывает только один шрифт – именно тот, который я добавил.

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

Вопрос 3. Формулировку «switch to fontconfig» я не очень понял, fontconfig – это ведь библиотека? И что мне с ней делать?

Интересно, что со статической сборкой под винду этой проблемы нет. Правда, виндовые сборки, которые я раньше распространял, основаны на более ранних версиях Qt (4.8 и 5.10).

Обновление. Проблема решилась по наводке анонимуса. Я поставил пакеты libfreetype6-dev и libfontconfig1-dev и в ./configure дополнительно к указанному выше написал:

-fontconfig -feature-freetype -system-freetype FREETYPE_INCDIR=/usr/include/freetype2

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

Отмечаю тему решённой. Но если у кого есть рабочий комплект ключей к Qt 5.15 (особенно в части libxcb) – будет интересно почитать и скорее всего, не только мне.

hobbit
()

Чёрный экран по выходе из кед

 , , ,

Привет, ЛОР.

Система Manjaro KDE, кеды шестые, sddm, обновляюсь регулярно. Видеокарта нвидия 1030, драйвер блоб, сеанс X11.

Примерно неделю или две назад (точную дату не записал, к сожалению), началось. Загружаюсь, логинюсь через sddm, работаю. Потом хочу выключиться, перезагрузиться или выйти из сеанса, вместо экрана логина получаю чёрный экран и курсор на нём.

По описанию похоже на первый пункт отсюда, но у меня сама система при этом вполне работает, можно по Ctrl+Alt+F3 переключиться на консоль и перезапустить sddm через systemctl или просто перезагрузить операционку. Но хочется, чтобы при выходе из кед отображался экран sddm, как у людей. Тем более комп многопользовательский, жена и сын на нём тоже работают.

Пару дней назад обсуждали блокировку сайта нвидии для России, думаю, что это здесь не при чём, поскольку моя проблема началась раньше.

Куда копать?

Обновлено: Всем спасибо за советы, особенно @spal, @hargard. Судя по этому багрепорту, сломано восстановление сеансов (Session Restore), заявлено, что проблема решена в Плазме 6.2.0.

Временное решение для более ранних версий: для всех пользователей, которые запускают KDE на компьютере, нужно в настройках сессий (systemsettings / сессии или «Управление сеансами») поставить «Начинать с пустой сессии/сеанса».

hobbit
()

Пользователи Sylpheed, поделитесь, пожалуйста, файлом контактов

 , ,

Привет, ЛОР.

После недавнего обсуждения я решил добавить в DoubleContact поддержку CSV-файлов от Sylpheed и даже начал это делать. Только сейчас я в дороге, исходники взял, а контрольный файл от Sylpheed 3.7 нет. И Sylpheed ставить особо некуда, под рукой только древняя макось. Да и под макось предлагают сборку Sylpheed только 3.41, где CSV ещё не было. Мне сейчас проще всего этот вопрос отложить на несколько дней.

Но может, кто-нибудь придёт на помощь и сделает в Sylpheed CSV буквально на 3-4 контакта типа Иван Петров и John Doe? Желательно, чтоб хотя бы в одном контакте были заполнены все поля и хотя бы в одном – не менее 2 емейлов.

Поскольку CSV – текстовый файл, результат можнл выложить прямо в комментариях, оформив как код. Начинаться он, как я предполагаю, будет с заголовка, приведённого здесь. Если нет – это тоже интересно.

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

hobbit
()