В продолжение
post/2017/08/25/qt_creator_baremetal_i_svjazka_gdb_7.7.1_openocd. Снова косяк и снова QtC не имеет прямого отношения к нему. Судя по всему, в самом GDB какие-то гонки.
Проблема проявляется на этот раз в том, что подобные сообщения от отсутствующем контексте исполнения появляются после попытки останова исполнения кода (для отладки), при этом, какого-то чёрта, появляются сообщения об вновь образовавшемся и тут же умершем треде. GDB не может уже потом ничего сделать, а QtC следом тоже сходит с ума, не зная, в каком состоянии что находится.
В общем, пока откатился на GDB 7.8 от Linaro:
https://aur.archlinux.org/packages/arm-none-eabi-gdb-linaro, оно, по крайней мере, работает.
Связанные ссылки и обсуждения:
PS текущая связка: GDB 7.8 + OpenOCD 0.10.0
И не только.
Для начала выполняем шаги, описанные в руководстве:
Если коротко и коспективно:
- Создаём директорию
usershare
: mkdir -p /var/lib/samba/usershare
- Создаём группу
sambashare
: groupadd sambashare
- Правим права доступа к директории:```
chown root:sambashare /var/lib/samba/usershare
chmod 1770 /var/lib/samba/usershare
1. Проверяем конфигурацию `smb.conf`:```
...
[global]
usershare path = /var/lib/samba/usershare
usershare max shares = 100
usershare allow guests = yes
usershare owner only = yes
...
- Разрешаем вашему пользователю создавать шары:
usermod -a -G sambashare $USER
- Рестартуем демоны
smbd
и nmbd
- Перелогиниваемся в систему
Как минимум теперь вы сможете управлять пользовательскими шарами, используя командную строку:
Для использования этого функционала через Dolphin, потребуется поставить пакет kdenetwork-filesharing
:
pacman -S kdenetwork-filesharing
После чего в свойствах директории появится вкладка, ответственная за общий доступ к содержимому директории.
В qmmp есть плагин глобальных клавиш, который может обрабатывать кнопки переключения треков, паузы, проигрывания и остановки. Помимо этого он может перехватывать клавиши управления громкостью, выключения динамиков. И делает он это по умолчанию.
Так вот, это поведения очень нехорошо дружит с плазмоидом, который через трей выводит индикатор громкости. Точнее начинает глючить функционал, который собственно и обрабатывает мультимедийные кнопки управления громкостью и выводит OSD уведомление на экран.
Судя по всему qmmp умудряется переопределить глобальный хук и полностью получает управление этими кнопками. До плазмоида попросту не доходят события. А так как подписка происходит при старте плазмоида, то и после выхода из qmmp обработка не возвращается на свои места.
Лечение простое:
- в настройках qmmp для плагина глобальных клавиш убрать реакцию на кнопки управления громкостью.
- открыть настройки трея и выключить и снова включить индикатор громкости.
PS подобное наблюдается и при использовании kmix. Более того, управления перехватывает последний запущенный механизм: или плазмоид или kmix. При закрытии одного из них, рекомендую перезагрузить оставшийся.
На днях заметил, что часть приложений время от времени перестают рисовать свои иконки в трее. С одной стороны, xembed - deprecated, но, судя по всему, плазма как-то пытается его использовать и отображать иконки в трее для “устаревших” приложений. Но не всегда это получается (ниже чуть подробнее).
По сути, нормально работать будут только приложения, которые поддерживают appindicator api.
Я делаю так:
ffmpeg -f v4l2 -i /dev/video0 -f alsa -i hw:1 -c:v copy -c:a copy -f matroska - | ffplay -autoexit -f matroska -
matroska
может запаковать RAW/YUV/RGB данные, поэтому она. MPEG-TS не может, поэтому не подходит.
Или не менее наркоманский вариант, используя только FFMPEG:
ffmpeg -f v4l2 -i /dev/video0 -f alsa -i hw:1 -vcodec rawvideo -pix_fmt yuv420p -c:a copy -f sdl2 default -f alsa default
Конвертация в yuv420p нужна для SDL2.
Памятка:
Т.е. используя std::tie()
вполне, без труда и пыли, можно сделать операторы сравнения для сложных структур. Сложности могут возникнуть, если нужно переопределить операторы сравнения для отдельных элементов (например: критерии сравнения строк).
Почему tie
, а не напрямую tuple
? tie
захватывает аргументы по ссылке - экономия на копировании.
Когда PulseAudio стартует, оно захватывает устройства и если пробуем запустить какое-то приложение, которое может только ALSA, то получим сообщение о невозможности открыть устройство, так как оно уже занято.
Что бы решить проблему нужна пара простых (по факту, но не по пути, которым к ним пришёл) шагов. Но для начала нужно посмотреть соответствующий раздел в вики Арчика:
https://wiki.archlinux.org/index.php/PulseAudio#ALSA.2Fdmix_without_grabbing_hardware_device
Идея проста: сказать пульсе работать через dmix для воспроизведения и через dsnoop для записи.
Собственно - сабж!
…и не нужные никакому пакету.
На случай, если что-то удалялось как pacman -R пакет
вместо pacman -Rs пакет
:
DEL:
pacman -Qd | awk '{print $1}' | xargs -I{} bash -c 'cnt=$(LANG=C pacman -Qi {} | grep "Required By<br/>|Optional For" | grep None | wc -l); (test $cnt -eq 2 && echo "{}")' | xargs -I{} bash -c '(pacman -Qi {};pacaur -Sii {};echo ================:simple_smile:' 2>&1 | less -R
Спасибо Романычу, просто список пакетов:
и с описанием, как в уродстве выше (без запроса к Sync базе или AUR можно просто: pacman -Qtdqi
):
pacman -Qtdq | xargs -I{} bash -c '(pacman -Qi {};pacaur -Sii {};echo ================:simple_smile:' 2>&1 | less -R
pacaur используется, что бы запросить информацию для AUR пакетов.
Если какой-то пакет в этом списке уже нужен как самостоятельная единица, то можно снять пометку:
pacman -S --asexplicit пакет
Теперь вопрос: а как проще?
ЗЫ пакеты, которые не требуются никаким другим пакетом можно получить просто выполнив pacman -Qt
Вроде не делал анонс…
Серия старых скринкастов, описывающая процесс разбора формата файлов локализации игр Boishock 1 и 2, создания библиотеки для распаковки/паковки и графического кросс-платформенного архиватора.
Залито на ютуб, что бы не занимало место на диске. Плюс ценность сомнительная, что бы делать более правильный бекап :wink:
Ссыль:
https://www.youtube.com/playlist?list=PLUrplWzJ_-EupzIVpgfRlarNjN0zcarpr
Используется для распределения и контроля количества клея по поверхности плитки. Хотя можно и для распределения других смесей использовать.
Хорошая статья которая описывает нюансы:
Если коротко, то эта связка криво работает. Поймано на ARM GDB 8.0, но воспроизводится и на 7.12.1. При наличии на борту устройства какой-либо RTOS. У меня это ThreadX. Хотя, возможно, для других всё отработает нормально. Но это мало что меняет: на старом GDB 7.7.1 тот же OpenOCD работает.
Суть проблемы и способ её решения без вмешивания в код под катом.
Проблема на ядрах 4.12 и 4.13 в Manjaro. На ядре 4.11 проблема не наблюдается. Засыпание в память, не на диск.
Пока окончательного решения не найдено. Ниже ссылки, которые будут определять направление движения:
-
https://forum.manjaro.org/t/linux-4-12/27111/74
* тут много чего: и отказ от blk-mq и игра с модулями ядра для virtualbox host и рекомендация остановить tlp (не мой случай).
* Отказ от blk-mq:
-
https://forum.manjaro.org/t/kernel-4-12-crashes-when-resuming-from-suspending/28435/52
* название говорит само за себя:
- отказ от blk-mq
- замена bfq-mq на bfq-sq
- отказ от bfq в пользу deadline или cfq
-
https://digi-merc.org/blog/2017-05-16-archlinux-freeze-resume/ и
https://www.reddit.com/r/archlinux/comments/4ytogl/suspend_to_ram_would_randomly_freeze_the_computer/
* замена асинхронного засыпания, последовательным. Возможно может решить часть проблем связанhttps://01.org/blogs/rzhang/2015/best-practice-debug-linux-suspend/hibernate-issuesные с железом и гонками.
После пары перезагрузок, включения bfq-mq на HDD вместо mq-deadline и установки не-DKMS версии virtualbox host, проблему не получается решить.
Для отладки использую следующую методику:
- логин на первой консоли и:
while true; do dmesg | tail -n 30; sleep 1; done
- логин на второй консоли и:
sudo tail -f /var/log/everything | grep -v 'Tor<br/>['
- логин на третьей консоли, ничего не вводим, используем как дисплей, но SysRq командой повышаем уровень логирования до максимального:
Alt+SysRq+9
(для T530: Alt+Fn[press]+S[press]+S[release]+Fn[release]+9
)
После чего работает в обычном режиме.
Прочее полезное:
Собственно полезно при отладке и разборе:
Запросов - подразумевается SETUP. Разбирает только стандартные запросы. Специфичные для интерфейсов, даже стандартных функций - нет.
Умеет:
- разбор дескрипторов
- разбор SETUP запросов
- разбор HID дескрипторов (не проверял)
Чумовой особенностью этого парсера является:
The page uses Javascript, so it must be enabled. This page can be downloaded and used offline, because it does not depend on any external or online resources.
Так что…
Чисто декларативная заметка.
- Добавляем в загрузку сервисы:```
sudo rc-update add consolefont boot
sudo rc-update add keymaps boot
1. Для настройки шрифта правим `/etc/conf.d/consolefont`, устанавливаем параметр `consolefont=`, остальное не трогаем:```
consolefont="UniCyr_8x16"
* Прочие варианты шрифтов можно посмотреть:```
ls /usr/share/kbd/consolefonts
* Поиграться с установкой шрифта можно при помощи команды `sudo setfont <FontName>`.
1. Для настройки раскладки и переключателя правим `/etc/conf.d/keymaps`, устанавливаем параметр `keymap=`, остальное - по желанию:```
keymap="ruwin_cplk-UTF-8"
* Прочие варианты раскладки можно посмотреть:```
ls /usr/share/kbd/keymaps/i386/qwerty
* Поиграться с установкой раскладки можно при помощи команды `sudo loadkeys <KeymapName>`
Опционально можно перезагрузиться или запустить сервисы вручную:
sudo service consolefont restart
sudo service keymaps restart