LINUX.ORG.RU

Сообщения ls-h

 

OpenCV, обработка событий оконной системы и файловые дескрипторы

Решение проблемы: OpenCV, обработка событий оконной системы и файловые дескрипторы (комментарий)


Привет всем!

Сразу говорю, хочется достаточно странного. Собственно в тегах это и указано. Пишу на Python небольшую софтинку с использованием OpenCV. Кроме обработки изображений OpenCV используется и для GUI. Это удобно, особенно в процессе отладки, т.к. не возникает необходимости в дополнительных манипуляциях с картинкой перед отображением, а можно просто показать с помощью cv2.imshow(). Да, я знаю, что модуль High-level GUI не предназначен для сложных интерфейсов и об этом прямо говорится в документации.

Проблема в том, что для работы GUI из OpenCV надо периодически дёргать cv2.waitKey(). Обычно это делается в цикле while True:. Но у меня есть другие источники событий, работа с которыми осуществляется через файловые дескрипторы. Т.е. цикл обработки событий через select / poll / epoll. Логичным было бы файловый дескриптор от unix-сокета, соответствующего подключению к X11-серверу добавить в этот цикл обработки событий и cv2.waitKey() вызывать только тогда, когда там есть данные, а не по таймауту или в цикле while True:.

Возникает вопрос. Как узнать номер нужного файлового дескриптора? Есть посмотреть содержимое /proc/self/fd/, то там явно есть нужный дескриптор:

0 -> /dev/pts/1
1 -> /dev/pts/1
2 -> /dev/pts/1
3 -> anon_inode:[eventfd]
4 -> pipe:[576490]
5 -> pipe:[576490]
6 -> socket:[576491]
7 -> socket:[576492]

Дескрипторы с номером больше 2 открываются после вызова cv2.namedWindow(). Как узнать, какой из них какой?

Как вообще в общем случае узнать какому объекту файловой системы соответствует ссылка вида socket:[number] в /proc/self/fd/?

 , ,

ls-h
()

Бывший мэр Мюнхена: «Microsoft ненавидит Linux»

https://www.linux-magazin.de/ausgaben/2019/10/interview-2/
http://techrights.org/2019/11/09/christian-ude-on-microsoft/

Бывший мэр Мюнхена Кристиан Уде дал интервью, в котором рассказал как Microsoft борется против использования GNU/Linux и другого свободного программного в правительственных учреждениях Европы, какими способами продвигает Windows и средства слежения за пользователями.

P.S.: Если кто силён в немецком, может переведёт и запилит как новость?

 , ,

ls-h
()

Аффинные преобразования в OpenCV и MXNet

Привет всем!

Есть, значит, у меня картинка и матрица аффинных преобразований для неё. Нужно исказить картинку и обрезать под требуемый размер. Сейчас это делается так:

result = cv2.warpAffine(img, affine_matrix, (target_w, target_h), borderValue=0.0)
и всё работает. Но не быстро, т.к. на процессоре. В приложении много где используется фреймворк MXNet, который может ускоряться на GPU. Прямого аналога для warpAffine я там не нахожу. Результаты гугления по теме очень скудны, нашлось только немного документации c одним примером. В принципе, это то, что нужно, замена выглядит как-то так:
grid = mx.ndarray.GridGenerator(data=affine_matrix, transform_type='affine', target_shape=(original_h, original_w))
img_nchw = mx.ndarray.array(img)
img_nchw = img_nchw.transpose((2, 0, 1))
img_nchw = mx.ndarray.expand_dims(img_nchw, 0)
result = mx.ndarray.BilinearSampler(img_nchw, grid)
(Понятно, что картинку потом надо превести к прежнему виду, сделать transpose, squeeze...)

Но есть большая проблема: GridGenerator надо передавать совсем не такую матрицу, как в warpAffine. Некоторые элементы матрицы достаточно понятно преобразуются в вид для GridGenerator. Например, в warpAffine увеличение в два раза задаётся как 2, а для GridGenerator - 0.5. Это работает, если задавать только данные элементы, без искажений. А вот с коэффициентами для искажений не понятно совсем, подобрать их не получается.

Может быть кому-то попадалась внятная документация по mx.ndarray.GridGenerator с примерами?

P.S.: Да, можно найти другие варианты, вместо MXNet для издевательств над картинками силами GPU. Но не хочется увеличивать количество зависимостей. Кроме того, MXNet используется много для чего и важно сохранить контекст размещения данных, т.е. чтобы массивы не надо было пересоздавать.

 , , , ,

ls-h
()

Разделяемая память для процессов на Python и не только.

Привет всем!

Есть большое многопроцессное приложение, с рабочими процессами, всякими GUI и логгерами в отдельных процессах и т.д. Построено с использованием модуля multiprocessing. Рабочие процессы обрабатывают большие данные. Для больших данных используется multiprocessing.Array, вот так:

class Worker(mp.Process):
    def __init__(self, buffers, pipe, other):
        super().__init__()
        self._buffers = buffers
        self._pipe = pipe
    def run(self):
        param = get_message(self._pipe)
        big_calculations(self._buffers[param.a], param.b, ...)

buffers = []
for i in range(10):
    buffers.append(mp.Array(ctypes.c_uint8, buffer_size, lock=False))
...
for i in range(10):
    p1, p2 = mp.Pipe()
    worker = Worker(buffers, p1, other_param)
    worker.start()
Синхронизация от mp.Array не требуется, процессы синхронизируются с помощью посылки/отправки сообщений через p1/p2, поэтому lock=False.

Вопросы:
* Размер/количество буфера(ов) задаются до запуска рабочих процессов. Как правильно реализовать изменение количества/размера после того, как рабочие процессы уже стартовали? Т.е. понятно, как отправить сообщение. Непонятно как закрыть существующий буфер и открыть новый.
* Что у mp.Array под капотом? Я заметил, что python открывает много файлов с именами вида /tmp/pymp-ixc54qx7/pym-27111-h7wi_sy3. Это как-то связано с mp.Array?
* Очень желательно, чтобы к этой общей памяти можно было обращаться не только из процессов на Python. Возможно как-либо её открыть из другого стороннего процесса, написанного на чём-то ещё? Может быть мне тогда что-то другое использовать, а не mp.Array?

Аналогичные вопросы про mp.Pipe():
* Как в работающий процесс передать конец новой трубы?
* Как передать в не Python'овский процесс конец трубы?

Спасибо!

 , , , ,

ls-h
()

Вешается диалог открытия файла

Привет всем!

Пишу приложение на Python+GTK. Наблюдаю очень странный баг, который не проявляется на одном компе и проявляется на другом. На втором он не сразу стал проявляться, а появился только недавно. При этом код моего приложения не менялся, обновлений систем не было. На обоих машинах одинаковая Ubuntu 18.04.

Из приложения надо открыть обычный диалог выбора файла:

dialog = Gtk.FileChooserDialog("Dialog", self._gui_main_window, action=Gtk.FileChooserAction.OPEN)
print("New dialog!")
response = dialog.run()
...
При этом выполнение программы наглухо вешается на первой строке, т.е. ещё до вызова response = dialog.run() и даже print не отрабатывает. Через секунд 30 в консоль выводится сообщение:
Error creating proxy: Error calling StartServiceByName for org.gtk.vfs.UDisks2VolumeMonitor: Timeout was reached (g-io-error-quark, 24)
И всё... Дальше глухо висит, диалог так и не показывается, основное окно перестаёт перерисовывать себя при изменении размеров. Если нажать Ctrl+C, то главное окно продолжает висеть, хотя консоль освобождается. Убивается через обычный kill.

Что интересно, если приложение запускать без всякой сессии, просто xterm и Xorg, то всё работает как надо, диалог открывается. А в полноценной сессии (пробовал GNOME и XFCE) случается описанный выше зависон.

Я погуглил и нашёл отдалённо похожее поведение: https://gitlab.gnome.org/GNOME/gtk/issues/1066 тут в консоль выводится аналогичное сообщение. Но, у меня этот баг срабатывает только в одном приложении (на Python, которое я пишу), в других приложениях всё нормально. /etc/fstab не содержит сетевых монтирований.

Куда копать?

=== UPD ===
Запустил с отладкой сообщений D-Bus. Перед зависанием вот что выводится в консоль:
GDBus-debug:Call:
 <<<< ASYNC COMPLETE org.freedesktop.DBus.StartServiceByName() (serial 0)
      FAILED: Timeout was reached
Как бы вообще отключить любое общение по D-Bus для GTK в рамках моего приложения? Мне оно нафиг не надо, как и UDisks2. У меня задача выбрать локальный файл.

=== UPD 2 ===
Заработало после того, как убрал из переменной GTK_MODULES запись «appmenu-gtk-module».
Вот такое содержимое данной переменной в стандартной сессии:
GTK_MODULES=appmenu-gtk-module:appmenu-gtk-module:gail:atk-bridge
, при этом не работает. А вот так:
GTK_MODULES=gail:atk-bridge
- работает.

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

 , ,

ls-h
()

Резервирование памяти для определённых процессов.

Привет всем!

Последнее время часто попадаются новости и обсуждения относительно работы GNU/Linux в условиях нехватки памяти. Встроенный в ядро OOM-Killer, более гибкий вариант из пространства пользовательских процессов... есть разные способы прибить разжиревшее приложение.

А нет ли возможности пойти с другой стороны? Для группы процессов зарезервировать место в оперативной памяти. Например, чтобы процессы, составляющие DE (оконный и файловый менеджеры, терминал, т.д.) + базовые утилиты консоли) всегда имели резерв мегабайт 500. И этот резерв не могли бы использовать другие процессы.

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

 , , ,

ls-h
()

Граф состояний в приложении на GTK

Приветствую, товарищи!

Пишу значит я на Python (хотя, думаю не суть) frontend к некоему подобию базы данных. Интерфейс рисую в Glade. Ничего особо сложного, просто множество списков свойств, полей ввода и т.п. Штука в том, что у формы есть состояния: просмотр, редактирование набора свойств A, редактирование набора свойств B и т.д. Они взаимоисключающие, переход между ними заключается в скрытии/отображении и активации/блокировании разных виджетов. Переход заключается в вызовах методов hide(), show(), set_sensitive(). И строчек таких вызовов получается около 300. Это немного, но и само приложение пока в состоянии прототипа. Потом элементов формы будет многократно больше.

Возможно ли состояния отрисовать в Glade, а потом переходить между ними одним вызовом с названием состояния?
Что-то я такого не нашёл.

 , , ,

ls-h
()

Мошенники и Сбербанк

Привет всем!

Рано утром позвонил и разбудил подозрительный товарищ:
«ls-h, с вашей карты была попытка мошеннического перевода. Некто из другого города вошёл в ваш личный кабинет Сбербанка и пытался перевести деньги в Урюпинск Василию Пупкину. Мы, доблестная служба безопасности, всё предотвратили. Но нам надо проверить, что вы это вы. Назовите сумму последнего платежа и баланс по карте иначе мы заблокируем ваш счёт». СМС о входе в ЛК, конечно же, не приходило.

Товарищ был послан. Это я спросонья зря так сделал, не сообразил. Надо было сказать левую сумму и неправильный остаток и посмотреть, что будет дальше. Позвонил в Сбер, они предложили не делать ничего, по их словам данных недостаточно. Какой смысл в таких данных, они мне не сказали.

Теперь вот интересно стало, что можно сделать, если знать сумму последнего платежа и остаток на карте? Так же, собственно, им известно моё ФИО, город проживания и наличие карты Сбера (ну, тут можно просто наугад, они много у кого есть).
Я могу предположить, что дальше должна была быть какая-то атака на настоящую службу поддержки. Но вот что может дать служба поддержки по ФИО+адрес+сумма платежа+баланс? Привязать другой номер к мобильному банку? Или что? Может быть знает кто?

P.S.: Номер: +7 495 005 56 15

 , , , ,

ls-h
()

Как найти, кто использует подсистему (модуль) ядра?

Привет всем!

На телефоне (Asus Zenfone 2) в топе постоянно висит процесс "[hwrng]" и грузит одно ядро на 100%. Прошивка LineageOS 16. Ядро: Linux 3.10.108-Minimal #1 SMP PREEMPT Sun Apr 14 10:24:02 UTC 2019 aarch64. Поискал на профильных форумах, не нашёл ничего.

Я так понимаю, это какая-то подсистема (модуль?) генератора случайных чисел. Хотя, скорее всего, это не модуль, т.к.:

# lsmod                                                                     
lsmod: No file /proc/modules: No such file or directory
Соответствующего файла устройства не обнаружено:
# ls -l /dev/hwrng
ls: /dev/hwrng: No such file or directory
Как узнать из-за чего hwrng потребялет так много ресурсов?
Какой-то процесс постоянно генерирует случайные числа? Как узнать, какой?
Вопрос задаю сюда, а не в Mobile, т.к. вопрос, как мне кажется, не сильно привязан к Android, а скорее про Linux вообще.

 , , , ,

ls-h
()

ГНОМЭ!

И Nautilus. Давно пользуюсь, но всё хуже и хуже...

Почему в корень надо ходить через «Other locations -> Computer»?
А если зайти в директорию, которая находится внутри домашней, то из пути сверху корень пропадает. При этом нет кнопки «Наверх», а есть только «Назад» и «Вперёд». Экономия места? Тогда почему кнопки прокрутки пути висят всегда, даже если путь влезает? Где логика? Её нет, её съел HIG.

Как нормально ходить вверх? Да, можно нажимать Alt+⇧. Но это неудобно делать одной рукой. Правда это давнишнее «удобство», но всё же. Shortcuts можно посмотреть в меню «Files -> Keyboard Shortcuts», но там ничего нельзя поменять. А ведь когда-то давно, когда в GTK приложениях были нормальные меню сверху, для любого можно было менять Shortcuts для любого пункта. О самом меню ещё позже...

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

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

Очень убогий поиск. Есть выбор параметров поиска «Full text» и «File name», при этом одна строка ввода. Как тут искать, если текст внутри файла и имя искомого файла не одно и тоже?

Nautilus тупит. Вечно какие-то проблемы с обновлением содержимого директории если в неё происходит запись другой программой. Когда обновляет, а когда надо вручную. И это я про локальную директорию говорю. Иногда он тупит ещё прикольнее: открываю директорию с тремя файлами, он показывает только два и надпись «Loading...» внизу.

Странности в отображении файлов. Для символьных ссылок на файлы .so не показывается значок символьной ссылки. Для директорий и для других файлов - показывается. Что за прикол?

Меню. Это относится не только к Nautilus, но и к другим приложениям. Что за изнасилование идеи глобального меню? Меню типа macOS можно понять и оправдать лёгкостью попадания мышкой по пунктам, т.к. мышку можно просто толкнуть до края экрана. Тут же всё меню поделено на две части: сверху в панельке и в гамбургере внутри окна. Очень удобно! Пока не нажмёшь, не видно где какие пункты. В macOS есть поиск по пунктам меню, раньше в Unity такое тоже было. Зачем выпилили удобную вещь? Ах, да! Пункты меню же тоже все выпилили. Меню-гамбургер отвратительное! При открытии подменю оно открывается не рядом с родительским, а вместо. И быстро пробежаться по пунктам уже не получится.

Диалоги прибитые к родительским окнам. Какой HIG-онатик это придумал? Как во время открытого диалога, например, посмотреть что-то в основном окне приложения?

 ,

ls-h
()

Мой прекрасный ЛОР!

Трям!

Хочу свой ЛОР. Ты тоже хочешь свой ЛОР, и он хочет свой ЛОР. Все хотят.

И опять и опять звучат предложения «добавить возможность вставлять SVG изображения» (соседний топик, был соседний, пока тему не перенесли из раздела «linux-org-ru»), «добавить ёможи», «убрать ёможи», «новая тема», «древовидное представление», «пусть ссылки на картинки открываются в попапах». Так пусть же они исполнятся все и никто не уйдёт обиженным!

Гениальное предложение:
+ Каждому ЛОРчанину - возможность загружать себе html+js+css, выделить на это по 1 МиБ. Ну, можно не всем, а начиная с определённого уровня ★-нутости.
+ Сделать API для получения списка тем, комментариев, добавления, редактирования, т.п.

Профит:
! Каждый сможет сам себе сделать фичу, тему, более удобное представление...
! Быстрое развитие сайта, без вот этого вот «позязя, добавьте возможность»
! Обмен шаблонами в отдельном разделе, совместная разработка - отличный повод полить фекалиями код товарища для дружеского общения!
! Новый раздел галереи «Мой ЛОР» круче вашего
! Уникальность. Ни на каком форуме такого нет. Должен же лор чем-то выделяться, кроме эпичности срачей.

Предпосылки:
Я вот не могу читать и разводить срачибез древовидного представления. Да, есть скриптик, LORTreeView. Но его надо везде с собой носить, устанавливать. А без него так блеват и кидат неудобно очень! Вот и в соседней теме на предложение по показу картинок отвечают «Прикрути себе user script». Но это же костыль жуткий. У меня при использовании LORTreeView часто мелькает оригинальная страница до того, как скрипт успеет её переделать. И это печалит!


Перемещено Shaman007 из linux-org-ru

 , ,

ls-h
()

Правильного монтирования, печалей и страдания пост.

Приветствую, ЛОРчане!

Начну с вопроса:
Где правильно создавать директории для монтирования от имени пользователя?
Например, надо мне получить доступ к удалённой файловой системе через sshfs, куда подмонтировать? Я было подумал, что в /media/$USERNAME. Не зря же сделали в /media поддиректорию $USERNAME. Но нет, владелец у /media/$USERNAME есть root:root - «permission denied».
Смонтировал в ~/.local/mnt/$REMOTE_MACHINE_NAME.
Где это делать по фэн-шую?

Теперь давайте печалиться. Почему это всё не стандартизировано? Где же Поттеринг на серебряном коне, когда он так нужен?

У GNOME есть своя балалайка подсистема GVfs для монтирования удалённых FS, различных архивов, образов дисков и т.п. И (Ура!) к подмонтированному содержимому можно получить доступ из любой программы через директорию /run/user/$UID/gvfs/. Т.е. это нормальное монтирование, можно удобно из терминала что-то сделать. А ещё файловые менеджеры показывают смонтированный ресурс в боковой панели. Но оно тормозное и путь к точке монтирования длинный достаточно. Почему в /run/user/$UID/gvfs/? Что это за место такое? Ну и без GNOME как его смонтировать?

Из-за медлительности варианта из GNOME пришлось переключиться на sshfs. Работает быстрее, но окружение рабочего стола про такое монтирования уже ничего не знает. Смонтировать/размонтировать можно только через терминал. Но быстрее, да.

Есть также KDE со своим KIO. Работает бодро, но эти «монтирования» видны только приложениям из KDE и никому больше, т.к. не монтирования это вовсе, а какие-то костыли кривые. С Midnight Commander - аналогично.

Где же единое средство, чтобы из терминала и из GUI можно было монтировать и размонтировать (именно монтировать, а не как в KIO) одинаково удобно любые файловые системы, удалённые и локальные, архивы, образы дисков и прочие штуки? Чтобы при этом окружение рабочего стола знало про это.


Перемещено Shaman007 из talks

 , , , ,

ls-h
()

ЛОР, посоветуй годную мышь!

Привет, ЛОРчане!

Сразу хочу уточнить, я ищу мышь. Не тачпад, не трекбол, не клавиатуру с пипкой-теребонькой, а мышь. А то бывает, спросишь тут совета о покупке, и начинается: «Это тебе не надо, я знаю!», «У меня вообще руль и мне так удобно» и т.п.

Чего хочется:
* Большая. Длина от 125мм или около того. Не то, чтобы у меня огромная рука, но когда кисть полностью лежит, это гораздо удобнее, чем зажимать мелкую мышь.
* Под правую руку. Но можно и симметричную.
* Беспроводная. У меня на столе часто навалено непойми что, поэтому провод будет цепляться, мешаться. С беспроводной свободы больше. В соревновательные шутеры я не играю, дополнительный лаг не так страшен, если в разумных пределах.
* Свой USB передатчик, Bluetooth'а в настольном компе нет. Да и попадалось, что Bluetooth мыши в Linux заводятся более геморройно.
* Элементы питания формата АА или ААА, более предпочтительны. А то аккумулятор ёмкость потеряет, фиг заменишь потом.
* Программируемые дополнительные боковые кнопки. Например, не особо люблю нажимать на колесо и предпочёл бы переназначить на боковую кнопку.
* Изменяемое DPI/Скорость по нажатию дополнительной кнопки. Редко, но иногда случается, что мне надо потыкать в графический редактор, попасть там во всякие сетки/направляющие, поэтому замедление курсора по требованию будет очень кстати.
* Естественно, чтобы дополнительные кнопки, DPI, варианты пробуждения после бездействия, чтобы всё можно было настроить в Linux. Пусть с шаманством, но можно было в принципе.
* Желательно, чтобы продавалась просто в магазине. Старая уже разваливается, нет желания два месяца ждать из Китая.
* Разумная цена, до 2000 - 2500 руб. Мне не надо супер точный лазер для супер геймеров задротов, не надо RGB-подсветки, вибрации, грузиков для регулировки веса и прочей ерунды.

Присмотрел вот такую: A4Tech Bloody R7 Black USB
Да, не всем требованиям соответствует, что я описал, но вроде ничего. Смущает то, что ПО под Windows только. Насколько я понимаю, все настройки хранятся в самой мышке и запущенного драйвера не надо, но менять их в Linux нечем. Единственное ПО, что я нашёл для Linux - https://github.com/maxmati/a4tech-bloody-linux-driver
Но, как я понимаю, тут можно только подсветкой управлять, что вообще не надо ни разу. Может быть есть что-то более полноценное для неё или других из этой серии?

 , , ,

ls-h
()

Как заставить работать OpenCV DNN на Vulkan?

Привет всем!

Ковыряюсь с OpenCV и моделями Caffe. Пытаюсь ускорить это дело, т.к. средствами процессора скорость получается очень печальной.
К своему сожалению выяснил, что OpenCL, похоже пролетает. Встроенный GPU от Intel HD Graphics 4600 не поддерживается проприетарным драйвером Intel, на свободном beignet тоже какое-то шаманство и не собирается ядро. Есть отдельная видеокарта AMD R9 270x, и на ней шаманство с драйверами и поддержкой OpenCL. AMDGPU-Pro официально её не поддерживает. Включить можно опцией при загрузке. Старый Blender (2.78) даже что-то рендерит в Cycles, но при запуске OpenCV опять не собирается ругается так:

Status -11: CL_BUILD_PROGRAM_FAILURE
-DT=float -Dconvert_T=convert_float -DRELU_NO_SLOPE -D AMD_DEVICE
Остаётся попробовать Vulkan, вроде у меня он работает, vulkan-smoketest чайники рисует. Но как его вообще включить?
cv2.dnn_Net.setPreferableBackend(net, cv2.dnn.DNN_BACKEND_VKCOM)
cv2.dnn_Net.setPreferableTarget(net, cv2.dnn.DNN_TARGET_VULKAN)
- не приводит ни к чему. OpenCV просто молча использует процессор. Куда копать?
opencv-contrib-python - 4.0.0.21
python - 3.6.6

 , , , ,

ls-h
()

Как найти узкое место в многопроцессном приложении?

Привет всем!

Пишу высоко нагруженное приложение на python, состоящее из множества процессов. Тяжёлые работы (вычисления) производятся с помощью numpy и dlib. Разделение на процессы сделано с через модуль multiprocessing. Отдельный процесс на источник данных, несколько процессов рабочих, один процесс сбора статистики и вывода результатов. Обмен большими данными производится через общую память (несколько объектов multiprocessing.Array(ctypes.c_uint8, buffer_size, lock=False)). Обновление состояния, сообщения о событиях - multiprocessing.Pipe(). Изначально была очередь, но работало совсем медленно, с переписыванием на Pipe стало более-менее.

Проблема в том, что рабочие процессы грузят ядра процессора процентов на 60 - 70. Т.е. по неизвестной причине они простаивают 30% времени. Я никак не могу найти это узкое место.

Мне нужно некое средство профилирования, для работы с множеством процессов. В моём понимании примерно следующее:
В нужных местах кода добавляются вызовы для вывода (в файл или stdout) точных отметок времени с комментариями (что за функция, какие-то параметры, т.п.). По этим отметкам потом строится график, где по оси X отмечается время, по Y - процессы, а на плоскости графика - сами отметки с комментариями.
Так я бы смог понять, какой процесс кого и когда ждёт и где искать это узкое место.
Вывод временных отметок можно и самому навелосепедировать, не сложно. Но, может быть, есть что-то готовое? А вот с графиком сложнее, в идеале он должен быть векторным и масштабируемым, с поиском и инструментами измерения (сколько времени прошло от события А до события Б), т.к. временных отметок предполагается ну очень много.

Как-то так...
P.S.: Переписать с Python'а на что-то другое не вариант.

 , ,

ls-h
()

X2Go. Несколько вопросов. Как сделать его лучше?

Привет всем!

Попробовал эту штуку... второй раз. Первый - не распробовал.
Вполне ничего, сопоставимо с VirtualGL+TigerVNC. Иногда даже чуть быстрее. В прошлый раз (когда я тут спрашивал, что вообще выбрать для удалённого GUI) было медленнее, но с тех пор на рабочем месте улучшился интернет и лидер скорости удалённых рабочих столов поменялся. Хотя, до виндового RDP (особенно свежего, в десяточке) ещё не дотянуло.

Но жить можно. Вот только бы победить некоторые трудности:

* Как отключить перехват Alt+Tab в полноэкранном режиме? Т.е. нужно, чтобы моя локальная система переключала окна, для удалённой у меня другое сочетание клавиш. Клиент Qt x2goclient.

* Что сделать, чтобы в нём работало воспроизведение видео? Хотя бы 720р. Ну да, мне по работе надо смотреть видео. Точнее, я пишу софт который его обрабатывает и который запускается на этом самом ну очень мощном сервере. Иногда таки бывает нужно запустить его в интерактивном режиме. Тестил VLC, перепробовал там наверное все варианты вывода, всегда чёрный экран и сессия X2Go зависает, пока VLC не грохнуть. Мой софт без всяких расширений X11 просто показывает кадры как картинки. Работает, но очень медленно. В сети попадались видео-демки как в X2Go можно удалённо использовать плеер. Но инструкцию я не встретил.

* В режиме отдельных приложений очень тормозит перемещение окон. На случай, если перехват Alt+Tab отключить не получится, мне вполне подойдёт режим отдельных приложений. А может быть он и вообще окажется лучше. Но есть большая проблема: если одним окном провезти над другим, то остаётся «стёртая» область, которая ооочень медленно отрисовывается, буквально 10 секунд. Выглядит это как старый комп, со старым X11 сервером без расширения Composite.

P.S.: Как там в Wayland, уже сделали что для удалённой работы? Хочется попробовать альтернативные варианты.

 , , , ,

ls-h
()

Ecryptfs/encfs наоборот. Хранение данных в облаке.

Всем здрасте!

Как работают указанные в заголовке ФС? Данные хранятся зашифрованными пофайлово на любой файловой системе, расшифровываются налету при доступе через точку монтирования данных псевдофайловых систем.

А бывают прозрачные средства пофайлового шифрования наоборот?
Т.е. файлы хранятся в открытом виде и шифруются на лету, при обращении к ним через точку монтирования специальной ФС.

Нужно для синхронизации файлов через облако. Личные фотографии, некоторые документы, многое в архивах. Ничего сверх секретного, чтобы хранить в зашифрованном виде и нагружать компьютер шифрованием/дешифрованием при любом обращении к этим файлам. Однако, не хотелось бы их просто так показывать посторонним. И было бы удобно, если бы клиент облачного сервиса (Яндекс диск, Google drive или Dropbox, пока ещё не решил, что лучше) забирал их в зашифрованном виде.

Есть что-то такое?

 , , ,

ls-h
()

Wine, OpenGL и Cinema 4D R17

Привет всем!

Direct3D эмулируется внутри WINE. А как обстоят дела с OpenGL, чем определяется версия и набор расширений?

Я пытаюсь использовать Cinema 4D* версии R17 под WINE.
Приложение работает, но отображение сцены очень тормозит.
Проверка параметров OpenGL в настройках показывает, что мой GPU ничего не умеет и вообще какой-то кривой: https://dropmefiles.com/I3JOY
Похоже, что вообще используется программный рендеринг.

Я пробовал и WINE из дистрибутива и пару версий из PlayOnLinux.
Результат одинаковый, ошибки немного разные.

wine-3.0 (Ubuntu 3.0-1ubuntu1)


wine64 .wine/drive_c/Program\ Files/MAXON/CINEMA\ 4D\ R17/CINEMA\ 4D.exe
0009:fixme:heap:RtlSetHeapInformation 0x780000 0 0x23f830 4 stub
0009:fixme:ver:GetCurrentPackageId (0x239260 (nil)): stub
0009:fixme:thread:SetThreadStackGuarantee (0x23f6d0): stub
0009:fixme:reg:GetActiveProcessorCount semi-stub, returning 8
0009:fixme:process:SetProcessPriorityBoost (0xffffffffffffffff,1): stub
0009:fixme:heap:RtlSetHeapInformation 0x1dd0000 0 0x23d520 4 stub
Application start : 08/30/18 at 01:19:04
Executable : 64 Bit
Version / Build : 17.016 / RB136011
Debugger : not available
Memory model : release
Startup path : file:///Z:/home/lsh/.wine/drive_c/Program Files/MAXON/CINEMA 4D R17
Application path : file:///Z:/home/lsh/.wine/drive_c/Program Files/MAXON/CINEMA 4D R17/CINEMA 4D.exe
Application executable : file:///Z:/home/lsh/.wine/drive_c/Program Files/MAXON/CINEMA 4D R17/CINEMA 4D.exe
Resource path : file:///Z:/home/lsh/.wine/drive_c/Program Files/MAXON/CINEMA 4D R17/resource
Module path(s) : file:///Z:/home/lsh/.wine/drive_c/Program Files/MAXON/CINEMA 4D R17/modules
Temporary path : file:///C:/users/lsh/Temp
Prefs path : file:///C:/users/lsh/Application Data/MAXON/CINEMA 4D R17_EB682A3C
Global Prefs path : file:///C:/users/lsh/Application Data/MAXON
OS version : Windows XP Professional Service Pack 3 (build 2600)
Processor : 8(8)x Intel Core i7-4770 CPU
Computer name : lsh-ubu
Thread Count : 8
Cpu Speed (MHz) : 3900.000
Application Type : Modular
Command line arguments : none

Loading file:///Z:/home/lsh/.wine/drive_c/Program Files/MAXON/CINEMA 4D R17/modules/c4dplugin.xdl64 with module(s) net.maxon.c4d.c4dplugin
Loading file:///Z:/home/lsh/.wine/drive_c/Program Files/MAXON/CINEMA 4D R17/modules/crashhandler.module.xdl64 with module(s) net.maxon.crashhandler
Loading file:///Z:/home/lsh/.wine/drive_c/Program Files/MAXON/CINEMA 4D R17/modules/crypt.module.xdl64 with module(s) net.maxon.crypt
Loading file:///Z:/home/lsh/.wine/drive_c/Program Files/MAXON/CINEMA 4D R17/modules/glcl_trace.module.xdl64 with module(s) net.maxon.glcl_trace
Loading file:///Z:/home/lsh/.wine/drive_c/Program Files/MAXON/CINEMA 4D R17/modules/image.module.xdl64 with module(s) net.maxon.image
Loading file:///Z:/home/lsh/.wine/drive_c/Program Files/MAXON/CINEMA 4D R17/modules/mesh.module.xdl64 with module(s) net.maxon.mesh
Loading file:///Z:/home/lsh/.wine/drive_c/Program Files/MAXON/CINEMA 4D R17/modules/misc.module.xdl64 with module(s) net.maxon.misc
Loading file:///Z:/home/lsh/.wine/drive_c/Program Files/MAXON/CINEMA 4D R17/modules/network.module.xdl64 with module(s) net.maxon.network
Loading file:///Z:/home/lsh/.wine/drive_c/Program Files/MAXON/CINEMA 4D R17/modules/triangulation.module.xdl64 with module(s) net.maxon.triangulation
0009:fixme:iphlpapi:NotifyIpInterfaceChange (family 0, callback 0xa371700, context (nil), init_notify 0, handle 0xa5462e0): stub
0009:fixme:msg:ChangeWindowMessageFilter 233 00000001
0009:fixme:win:DisableProcessWindowsGhosting : stub
0009:err:wgl:X11DRV_wglCreateContextAttribsARB Context creation failed (error 1)
0009:err:wgl:X11DRV_wglCreateContextAttribsARB Context creation failed (error 1)
ZeroConf error: Couldn't get bonjour version [sys_bonjour.cpp(1411)]
QTGuiAgent: Waiting for a connection...
QTGuiAgent: RegisterClient
QTGuiAgent: Waiting for a connection...
QTGuiAgent: Waiting for a connection...
0009:fixme:msvideo:DrawDibDraw wFlags == 0x00001000 not handled --- таких строчек очень много, одинаковые я выкинул.
Error: OS error loading plugin slapi.dll. Could not load dll. (file:///Z:/home/lsh/.wine/drive_c/Program Files/MAXON/CINEMA 4D R17/resource/modules/i_skp/slapi.dll) [win_dll.cpp(237)]
Cause: Windows System Error #998: No access to memory location. [win_dll.cpp(232)]

Тут есть явно что-то не то с OpenGL: 0009:err:wgl:X11DRV_wglCreateContextAttribsARB Context creation failed (error 1)

Теперь результат из POL:

[08/30/18 01:10:17] - Running wine-3.10-staging CINEMA 4D.exe (Working directory : /home/lsh/.PlayOnLinux/wineprefix/3.10st_c4dr18/drive_c/Program Files/MAXON/CINEMA 4D R17)
0028:fixme:heap:RtlSetHeapInformation 0x460000 0 0x23e7e0 4 stub
0028:fixme:thread:SetThreadStackGuarantee (0x23f6e0): stub
0028:fixme:reg:GetActiveProcessorCount semi-stub, returning 8
0028:fixme:process:SetProcessPriorityBoost (0xffffffffffffffff,1): stub
0028:fixme:heap:RtlSetHeapInformation 0x1bc0000 0 0x23d550 4 stub
Application start : 08/30/18 at 01:10:17
Executable : 64 Bit
Version / Build : 17.016 / RB136011
Debugger : not available
Memory model : release
Startup path : file:///C:/Program Files/MAXON/CINEMA 4D R17
Application path : file:///C:/Program Files/MAXON/CINEMA 4D R17/CINEMA 4D.exe
Application executable : file:///C:/Program Files/MAXON/CINEMA 4D R17/CINEMA 4D.exe
Resource path : file:///C:/Program Files/MAXON/CINEMA 4D R17/resource
Module path(s) : file:///C:/Program Files/MAXON/CINEMA 4D R17/modules
Temporary path : file:///C:/users/lsh/Temp
Prefs path : file:///C:/users/lsh/Application Data/MAXON/CINEMA 4D R17_8DE13DAD
Global Prefs path : file:///C:/users/lsh/Application Data/MAXON
OS version : Windows 7, 64 Bit, Ultimate Edition Service Pack 1 (build 7601)
Processor : 8(8)x Intel Core i7-4770 CPU
Computer name : lsh-ubu
Thread Count : 8
Cpu Speed (MHz) : 3900.000
Application Type : Modular
Command line arguments : none

Loading file:///C:/Program Files/MAXON/CINEMA 4D R17/modules/c4dplugin.xdl64 with module(s) net.maxon.c4d.c4dplugin
Loading file:///C:/Program Files/MAXON/CINEMA 4D R17/modules/crashhandler.module.xdl64 with module(s) net.maxon.crashhandler
Loading file:///C:/Program Files/MAXON/CINEMA 4D R17/modules/crypt.module.xdl64 with module(s) net.maxon.crypt
Loading file:///C:/Program Files/MAXON/CINEMA 4D R17/modules/glcl_trace.module.xdl64 with module(s) net.maxon.glcl_trace
Loading file:///C:/Program Files/MAXON/CINEMA 4D R17/modules/image.module.xdl64 with module(s) net.maxon.image
Loading file:///C:/Program Files/MAXON/CINEMA 4D R17/modules/mesh.module.xdl64 with module(s) net.maxon.mesh
Loading file:///C:/Program Files/MAXON/CINEMA 4D R17/modules/misc.module.xdl64 with module(s) net.maxon.misc
Loading file:///C:/Program Files/MAXON/CINEMA 4D R17/modules/network.module.xdl64 with module(s) net.maxon.network
Loading file:///C:/Program Files/MAXON/CINEMA 4D R17/modules/triangulation.module.xdl64 with module(s) net.maxon.triangulation
0028:fixme:iphlpapi:NotifyIpInterfaceChange (family 0, callback 0xa161700, context (nil), init_notify 0, handle 0xa3362e0): stub
0028:fixme:msg:ChangeWindowMessageFilter 233 00000001
0028:fixme:win:DisableProcessWindowsGhosting : stub
ZeroConf error: Couldn't get bonjour version [sys_bonjour.cpp(1411)]
QTGuiAgent could not be launched
QTGuiAgent could not be launched
0028:fixme:msvideo:DrawDibDraw wFlags == 0x00001000 not handled --- таких строчек очень много, одинаковые я выкинул.
0028:err:winediag:SECUR32_initNTLMSP ntlm_auth was not found or is outdated. Make sure that ntlm_auth >= 3.0.25 is in your path. Usually, you can find it in the winbind package of your distribution.
0028:fixme:kerberos:kerberos_SpInstanceInit 65536,0x7f0eb40602e0,(nil): stub

Тут такой ошибки с wgl:X11DRV_wglCreateContextAttribsARB не наблюдается, но результат такой же, что и в дистрибутивном WINE.

Система: Ubuntu 18.04
Видеокарта: AMD Radeon R9 270X
Драйвер: AMDGPU (не PRO), lsmod:

amdgpu 2703360 31
chash 16384 1 amdgpu
ttm 106496 1 amdgpu
i2c_algo_bit 16384 2 amdgpu,i915
drm_kms_helper 172032 2 amdgpu,i915
drm 401408 28 amdgpu,i915,ttm,drm_kms_helper

Выхлоп из glxinfo: http://paste.ubuntu.com/p/JGZxj8kzr2/
* - Blender не предлагать! Он, конечно, крут, но в данной ситуации требуется конкретный софт.

 , , ,

ls-h
()

Дырень (бекдор?) в X86 процессорах VIA

Немного ассемблерной магии и полный доступ получен:
https://www.youtube.com/watch?v=GQE3a8WLeds

Для Ъ не будет, лень с видео переписывать.

 , , ,

ls-h
()

Как использовать CUDA внутри LXC контейнера?

Привет!

Хост система Ubuntu 18.04. На хосте CUDA софт работает без проблем:


./deviceQuery Starting...

CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: «GeForce GTX 1050 Ti»
CUDA Driver Version / Runtime Version 9.1 / 9.1
CUDA Capability Major/Minor version number: 6.1
Total amount of global memory: 4039 MBytes (4234936320 bytes)
( 6) Multiprocessors, (128) CUDA Cores/MP: 768 CUDA Cores
GPU Max Clock rate: 1392 MHz (1.39 GHz)
Memory Clock rate: 3504 Mhz
Memory Bus Width: 128-bit
L2 Cache Size: 1048576 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384)
Maximum Layered 1D Texture Size, (num) layers 1D=(32768), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(32768, 32768), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 65536
Warp size: 32
Maximum number of threads per multiprocessor: 2048
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent copy and kernel execution: Yes with 2 copy engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device supports Compute Preemption: Yes
Supports Cooperative Kernel Launch: Yes
Supports MultiDevice Co-op Kernel Launch: Yes
Device PCI Domain ID / Bus ID / location ID: 0 / 130 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 9.1, CUDA Runtime Version = 9.1, NumDevs = 1
Result = PASS


В контейнере происходит ошибка:

./deviceQuery Starting...

CUDA Device Query (Runtime API) version (CUDART static linking)

cudaGetDeviceCount returned 30
-> unknown error
Result = FAIL


Но при этом nvidia-smi внутри контейнера работает нормально:

Sat Aug 4 22:49:53 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.48 Driver Version: 390.48 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 105... Off | 00000000:82:00.0 On | N/A |
| 29% 35C P8 N/A / 75W | 291MiB / 4038MiB | 0% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+

Для проброса в конфиге контейнера присутствуют таки строки:

# GPU Passthrough config
lxc.cgroup.devices.allow = c 195:* rwm
lxc.cgroup.devices.allow = c 243:* rwm
lxc.mount.entry = /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
lxc.mount.entry = /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry = /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
lxc.mount.entry = /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file


В контейнере стоят пакеты:

libcudart9.1 nvidia-cuda-dev nvidia-cuda-doc nvidia-cuda-gdb nvidia-cuda-toolkit


Файлы устройства присутствуют в /dev:

crw-rw-rw- 1 root root 195, 254 Jul 27 21:19 /dev/nvidia-modeset
crw-rw-rw- 1 root root 238, 0 Jul 27 21:18 /dev/nvidia-uvm
crw-rw-rw- 1 root root 195, 0 Jul 27 21:18 /dev/nvidia0
crw-rw-rw- 1 root root 195, 255 Jul 27 21:18 /dev/nvidiactl

Контейнер привилегированный.

Что я упустил в настройке?

 , ,

ls-h
()

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