LINUX.ORG.RU

Сообщения KivApple

 

VirtualBox + Tor

Форум — Admin

Решил тут в целях саморазвития поразбираться как настраивать связку Tor и VirtualBox.

Создаю виртуальную машину, выбираю в качестве сетевого подключения «Виртуальный адаптер хоста». Имя этот адаптер имеет vboxnet1, IP-адрес 192.168.57.1. Гость получает IP от встроенного в VirtualBox DHCP-сервера.

В sysctl на хосте задаю такие опции:

net.ipv4.ip_forward=1
net.ipv4.conf.all.route_localnet=1
net.ipv6.conf.default.forwarding=0
net.ipv6.conf.all.forwarding=0

iptables на хосте настраиваю так:

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t raw -F
iptables -t raw -X
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -I INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -I INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -I INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -I INPUT -p icmp --icmp-type echo-request -j ACCEPT

iptables -t nat -A PREROUTING -i vboxnet1 -p tcp --dport 9050 -j DNAT --to-destination 127.0.0.1:9050
iptables -A INPUT -i vboxnet1 -d 127.0.0.1 -p tcp --dport 9050 -j ACCEPT

iptables -I INPUT -i lo -j ACCEPT

iptables -I OUTPUT -o vboxnet1 -j DROP
iptables -I OUTPUT -o vboxnet1 -p tcp --sport 9050 -j ACCEPT
iptables -I OUTPUT -o vboxnet1 -p icmp --icmp-type echo-reply -j ACCEPT
iptables -I OUTPUT -o vboxnet1 -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -I OUTPUT -o vboxnet1 -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -I OUTPUT -o vboxnet1 -p icmp --icmp-type echo-request -j ACCEPT

iptables -I OUTPUT -o lo -j ACCEPT

Верно ли, что теперь виртуальная машина может только пинговать 192.168.57.1 и подключаться по TCP к 192.168.57.1:9050 (что в реальности будет перенаправлено на хосте на 127.0.0.1:9050)?

Верно ли, что приложения на хосте могут только пинговать виртуальную машину или являться сервером по адресу 127.0.0.1:9050 и никак больше по сети взаимодействовать с ВМ не могут?

Если не верно, то как сделать эти утверждения истинными?

 , , ,

KivApple
()

Не стартует плазма

Форум — Desktop

После какого-то времени работы с Gnome не выдержал и решил вернуться назад на KDE. Причин накопилось очень много (кастрированные по самое немогу настройки не только DE, но и дефолтных приложений, низкая производительность оболочки), но я создаю эту тему не ради холивара.

Переустанавливать Arch Linux я не захотел и просто поставил Plasma рядом с Gnome, а потом удалил Gnome и подчистил orphaned-пакеты.

В результате столкнулся вот с чем:

1) Первый раз плазма нормально запустилась, я её понастраивал немного (незначительные вещи типа комбинаций клавиш и количества рабочих столов).

2) Второй раз плазма нормально не запустилась. Пару минут висит заставка запуска плазмы, затем появляются дефолтные обои (хотя я их сменил). Панели нет. Чтобы получить нормальную плазму нужно запустить через krunner konsole и выполнить следующую команду:

pkill plasmashell && kstart5 plasmashell

После этого в 100% случаев появляется панелька, правильные обои рабочего стола и т. д.

3) Попробовал снести из хомяка все конфиги, имеющие отношение к плазме и Gnome (может я что-то забыл? не откажусь от однострочника, выносящий чисто конфиги плазмы).

4) Тот же результат.

В чём может быть проблема? Можно ли как-то посмотреть логи запуска plasmashell, чтобы узнать чего ему не хватает или чего он ждёт?

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

 , ,

KivApple
()

QBluetooth очень долго сканирует характеристики BLE устройства

Форум — Development

Скомпилировал и запустил пример LowEnergyScanner из Qt 5.8 Examples и обнаружил, что оно ОЧЕНЬ долго сканирует характеристики устройства (то есть нашли девайс, подключились, выбрали какой-нибудь профиль и по идее должны получить список его характеристик). В некоторых ситуациях я ждал минут 20 и закрывал приложение, ничего не получив.

При этом список устройств и список профилей открывается более-менее нормально.

При этом простой скрипт на Python с использованием библиотеки bluepy на той же машине (ноутбук под управлением Linux, встроенный адаптер поддерживает BLE) сканирует характеристики очень быстро. Аналогичная ситуация с приложением NRFConnect на Android смартфоне - получает список характеристик очень быстро.

В качестве BLE устройства выступает Android-смартфон с запущенным приложением BLESimulator (пробовал симулировать и батарейку, и датчик пульса - результат один), и самодельное устройство. В любом случае раз у Android и Python проблем нет, значит виноват обязательно Qt.

В чём может быть проблема?

Пробовал вручную выставлять в Qt maximumConnectionInterval в минимальное значение в 7.5 мс - профили находятся быстрее, но с характеристиками та же проблемы.

Либо посоветуйте другую библиотеку кроме QBluetooth, которая имеет хоть какую-то документацию и поддерживает смену connectionInterval (bluepy не умеет).

 , ,

KivApple
()

Выключение ноутбука при низком уровне заряда

Форум — Desktop

Где в Gnome3 настраивается поведение ноутбука при низком уровне заряда батареи? Никаких релевантных опций в параметрах электропитания не вижу.

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

 

KivApple
()

Отладка Chrome-like приложений

Форум — Development

Допустим, есть основная программа. Она запускает дополнительные программы-плагины и общается с ними (это могут быть пайпы, сокеты, stdin/stdout). Как отлаживать процессы-плагины?

Их нельзя запустить самих по себе, их должен запустить основной процесс.

 

KivApple
()

BLE и передача потока данных

Форум — Science & Engineering

Как я уже говорил в предыдущей теме, я хочу сделать BLE устройство, которое будет передавать данные с датчика. Я тут немного подумал и понял, что наврал. На самом деле мне нужно передавать 24 кбайт/сек (24 байта * 1000 Гц).

Это вообще реально с BLE? Если нет, то сколько получится передать, если между устройствами будет не больше пары метров?

И в какую сторону копать? Как реализовать подобный протокол? Сделать кучу характеристик с данными за последние несколько десятков миллисекунд? Или как?

 

KivApple
()

Посоветуйте микроконтроллер или радиомодуль

Форум — Science & Engineering

1) Есть датчик. У датчика есть интерфейс SPI. Я хочу опрашивать его пару тысяч раз в секунду и передавать значения без какой-либо обработки на компьютер на онтопике или смартфон на Android. При этом извращения в виде втыкания в смартфон всяких специальных приёмников через USB OTG не хочу. Должно быть нужно только приложение. В компьютер же можно что-нибудь и воткнуть (тот же Bluetooth донгл, но на ноутбуках практически всегда есть из коробки).

2) Поток данных - несколько килобайт в секунду. Однако было бы не плохо, если можно уходить в какой-нибудь режим ожидания и начинать передачу лишь по запросу. Да так чтобы это давало большой плюс к пункту 4.

3) Дальность: 5-10 метров это ок. Сотни метров не нужно.

4) Низкое энергопотребление. Вся система будет работать от аккумулятора и должна быть достаточно компактной (так что советы прикрутить к этой штуке аккумулятор от КАМАЗа идут лесом). В даташите на NRF24L01 указан ток потребления порядка 13 мА в момент передачи. С учётом того, что мне дальность можно поменьше (на улице дальность достигает 50-70 метров по моим личным тестам у этого модуля), как и скорость, то будем считать, что радиомодуль должен жрать не больше 5 мА в среднем.

По этим хотелками я прихожу к выводу, что мне должен идеально подойти Bluetooth (Wi-Fi явно завалит 4-ый пункт, а всякие NRF24L01 не проходят по 1-ому пункту - смартфон с ней работать не будет). Но тут есть вопрос: обычный Bluetooth или Low Energy? Поразбираться немного подольше я не против, если это даст заметный прирост в автономности. Или же BLE при непрерывной передаче нескольких килобайт данных в секунду жрёт не меньше, чем обычный Bluetooth?

Дальше. Есть два варианта - отдельный радиомодуль и отдельный микроконтроллер или комбинированное решение. По идее в плане энергопотребления второй вариант лучше, зато первый проще в реализации (я могу выбрать любой микроконтроллер, который умею программировать).

Так что можете посоветовать под мои хотелки, господа?

Вот, например, есть CC2540. Но там 8051 и не совсем понятно, что с SDK и компилятором (можно ли использовать какой-нибудь SDCC или надо обмазываться win-only софтом). Вроде как китайские платки с ним прошиты таким образом, чтобы управляться AT-командами. Возможно ли при этом будет воспользоваться всеми фишками BLE (допустим, я прикручу какой-нибудь MSP430 между радиомодулем и самим датчиком)?

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

 , ,

KivApple
()

Преобразование std::string в std::wstring

Форум — Development
$ cat test_encoding_conv.cpp 
#include <iostream>
#include <string>
#include <locale>
#include <codecvt>

int main() {
	std::string str = "z";
	std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
	std::wstring wstr = converter.from_bytes(str);
	std::string utf8 = converter.to_bytes(wstr);
	std::cout << utf8 << std::endl;
	return 0;
}
$ g++ -std=c++14 -o test_encoding_conv test_encoding_conv.cpp 
$ ./test_encoding_conv 
稀

Делал по примеру отсюда: http://stackoverflow.com/questions/7153935/how-to-convert-utf-8-stdstring-to-...

Почему не работает и печатает какой-то иероглиф вместо «z»?

РЕШЕНИЕ: Заменить std::codecvt_utf8_utf16 на std::codecvt_utf8. В результате всё отлично работает.

Как известно, на Linux wchar_t 32-битный, а под офтопиком - 16-битный. И судя по всему std::codecvt_utf8_utf16 неадекватно себя ведёт в этом случае. Соответственно, нужно либо гарантированно 16-битный тип, либо использовать другой преобразователь кодировку. Ответ на SO скорее всего тестировался под виндой, либо на другой версии libstdc++ (у кого-то всё работает, вероятно, баг имеет место быть не во всех версиях).

 

KivApple
()

Снова про ThinkPad и поворот экрана

Форум — Desktop

Не могу повесить кастомную команду на кнопку поворота дисплея у ThinkPad X230T. Называется эта кнопка с точки зрения Gnome «RotateWindows».

А мне очень важно повесить именно на эту кнопку, потому что клавиатура в режиме планшета недоступна.

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

Но при этом Gnome видит эту кнопку - как минимум он позволяет её назначить на что-нибудь (хоть это работать и не будет).

Более этого, эта кнопка блин работает. Он таки циклически меняет ориентацию при её нажатии. Казалось бы, зачем мне что-то менять, но проблема в том, что он это делает тупо через xrandr, а надо делать по-умному через thinkpad-rotate. Иначе координаты стилуса не трансформируются и он работает некорректно, хотя с тачем проблем нет (в KDE таких проблем не было - можно было вертеть экран через xrandr и стилус, и тачскрин на это правильно реагировали, а на эту кнопку можно было назначить любое действие).

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

Как с этим бороться?

UPD: Попробовал выполнить следующую команду:

gsettings set org.gnome.settings-daemon.plugins.orientation active false

Но это ничего не дало ни сразу, ни после релогина.

Попробовал повесить свой скрипт на другую комбинацию клавиш и оно проработало какое-то время, а потом перестало. Вот это вообще магия какая-то. Всякие мультимедиа клавиши работают (хотя они тоже иногда отваливаются, я уже создавал про это тему и мне никто ничего не подсказал, лечится перезапуском Gnome Shell), а моя добавленная нет. Даже если её удалить и заново добавить.

 , , ,

KivApple
()

Концепт языка программирования

Форум — Talks

Продолжаю свои эксперименты с языками программирования.

Вот плод моего больного воображения:

printf: (fmt: @(char const), ...) no_mangle;

main: (argc: int, argv: @(@(char))) -> int {
    i: int = 0;
    while (i < argc) {
        printf("%s\n", argv[i]);
        i += 1;
    }
    return 0;
};

ООП как-то так:

SomeClass: class {
    someFunc: (a: int) public {
        return a * 2;
    };
};

instanceOfSomeClass1: SomeClass;

Ну и массивы:

m: int[100];

Две основные идеи:

1) Обычно программист сначала придумывает название для сущности и только потом окончательно определяется с типом. Си заставляет писать сначала имя типа, а потом уже только потом название, что плохо. А уж всякие модификаторы (public, private, static, extern и т. д.) и подавно можно подобрать уже в самом конце определения.

2) Всякие фигурные скобочки придают коду наглядность куда лучше, чем паскалевский begin-end.

Но есть дополнительные вопросы:

1) Указатели. Как они должны определяться? В примере выше используется конструкция @(базовый тип). В том числе к ней можно применить модификаторы. Например, @(char const) volatile - изменчивый указатель на константный символ. Но можно было бы сделать что-то вроде Pointer(базовый тип), что было бы более наглядно, но и более многословно.

2) Опять указатели. Как следует выполнять разыменовывание указателей? C-style с помощью унарного *? Или может быть Pascal-style с помощью постфиксного ^? А может вообще считать указатели структурами с единственным полем value и делать разыменовывание как ptr->value (допустим, к полям структуры мы обращаемся через указатель через ->)?

3) И снова указатели. Как следует выполнять взятие адреса? C-style &? Или Pascal-style @? Или может неявно при присваивании указателю объекта?

4) Циклы. Классический сишный набор for-do-while с сишным же синтаксисом? Для for можно добавить for-each семантику. Какую? for (переменная: коллекция) или же for (переменная in коллекция)?

5) Шаблоны? Нужно ли? Если да, то какой синтаксис.

6) Алиасы для типов. Следуя основному стилю языка лучше сделать что-то вроде MyIntType: TypeAlias(int);, но это выглядит как введение ещё одного ключевого слова в язык. Может использовать какой-то символ? Какой?

7) ++ и --. Из-за этих операций возможны всякие странные вещи типа ++i + ++i. Так ли это плохо?

8) Преобразования типов. Варианты: сишный вариант (тип)значение. Паскалевский вариант тип(значение), C++ вариант reintepret_cast<тип>(значение). Что лучше?

Да, сам язык будет использовать концепцию модулей. Опрережающие определения не нужны - компилятор будет двухпроходным. Таким образом все определения из текущего модуля будут считаться объявленными в любой момент времени. Разумеется, циклы в иерархии наследования классов допускаться не будут. Подключение других модулей выполняется с помощью ключевого слова import some.module; Импорт возможен только до первой декларации. Взаимный импорт модулей должен корректно разруливаться компилятором (а не как в Python).

Весь код транслируется в Си. Причём язык позволяет закодировать любую сишную конструкцию (в том числе всякие грязные преобразования типов и т. д.). Более того, можно сделать что-то типа import «stdio.h». При этом компилятор с помощью libclang по-быстрому парсит подключенные заголовочные файлы, таким образом видит все сишные определения как свои (разве что с макросами печалька, но можно и этот момент частично разрулить).

Разумеется, помимо ООП и шаблонов должны быть лямбда-функции и асинхронное программирование.

UPD: Про псевдонимы типов придумал вариант синтаксиса получше.

NewType := OldType;

Логика простая - если вместо имени типа сразу идёт =, то это не обычное определение, а псевдоним типа (таким образом чисто технически между : и = может быть пробел).

 ,

KivApple
()

ThinkPad + док-станция + жёсткий диск

Форум — Linux-hardware

Только что забрал с почты док-станцию для своего ThinkPad X230T. Очень доволен. Обнаружил, что сбоку у док-станции есть полость для установки привода для компакт-дисков. На вид как аналогичная полость у ноутбуков. В настоящий момент пустует (но продавец предупреждал в описании, что дисковод в комплект не входит, так что всё ок).

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

Это нормально будет работать? Как насчёт того факта, что фактически у меня будет hot-plug жёсткого диска? Сами разъёмы на это явно рассчитаны (ведь дисковод точно также будет подключаться-отключаться на горячую, а это штатная опция производителя), но как к этому отнесётся жёсткий диск?

На этом жёстком диске будут хранить всякие резервные копии и ненужные большие файлы, ведь в самом ThinkPad X230T только один разъём SATA, а очень большие SSD (ну не использовать же HDD в качестве системного диска в 2017-ом году ведь!) стоят очень дорого.

Также интересует мнение людей, которые имеют представления конкретно о ThinkPad'ах и их док-станциях. Там есть рычажок, который выталкивает ноутбук из дока, а есть кнопка с пиктограммой «извлечь», которая делает так что ноутбук отключается от дока, но никуда не вытакливается. Это типа как «безопасное извлечение устройства» и надо сначала нажимать на кнопку, а потом на рычажок или же пофиг и можно сразу жать на рычажок?

 

KivApple
()

Как изменить ассоциацию приложения для директорий

Форум — Desktop

Имеется установленный Gnome3 на ArchLinux с полным набором приложений. В который входит в том числе Anjuta. И почему-то теперь считается, что всё что хоть каким-то образом может иметь отношение к проектам данной среды разработки, должно открываться именно в ней. Даже шелл-скрипты. С большинством типов файлов легко - открываешь свойства файла в Nautilus и меняешь ассоциацию на другое приложение.

Однако есть особый тип файлов, у которого вкладки «Открыть с помощью» нет - каталоги. А они тоже внезапно открываются в Anjuta. Ну то есть как открываются... Nautilus, конечно, догадывается самостоятельно открывать каталоги внутри себя, но вот другие приложения - нет.

То есть, например, втыкаю флешку, появляется всплывающее уведомление о ней, щёлкаю по нему. И вместо того чтобы открыть флешку в Nautilus, Gnome запускает Anjuta, которая предлагает импортировать проект из каталога. Или, например, PyCharm думает, что файловый менеджер это Anjuta и пункт меню со смыслом «Показать в файловом менеджере» запускает Anjuta.

Я ничего не собираюсь удалять, ибо это не правильно. Мне нужно как-то подправить ассоциацию файлов для типа «каталог», чтобы они открывались в Nautilus.

И да, авторы приложений, не являющихся файловыми менеджерами общего назначения, которые додумываются создавать какие-то ассоциации с inode/directory - идиоты.

 ,

KivApple
()

Как называются такие разъёмы

Форум — Talks

Пришёл таки мне 4G модем для моего ThinkPad X230T. Я уже его было разобрал и захотел установить на его место, но обнаружилось два неприятных факта:

1) У модема разъём M.2 и в Mini PCI-E он не пихается. К счастью, я очень быстро нашёл на AliExpress переходник за 150 рублей и уже заказал его.

2) В ThinkPad уже есть пара антенн для модема, которые никуда не подключены. Очень предпочтительно использовать именно их, ибо они проведены уже как надо через весь ноутбук и экран. Однако их разъёмы не подходят к разъёмам на 4G модеме - на модеме они меньше диаметром, чем на концах проводов от антенн. Казалось бы, можно тоже заказать переходники, но я не знаю по каким названиям искать.

У меня завалялся ноутбучный Wi-Fi модуль и я попытался воткнуть антенну туда - оно подошло, хоть и нафиг не нужно.

Вот фото: https://itmages.ru/image/view/5383405/5b392528

Слева 4G-модем, справа Wi-Fi модуль. К Wi-Fi модулю антенные разъёмы имеющиеся в ThinkPad подходят, к 4G-модему нет. Как называются эти разъёмы и как мне найти переходник с одного на другой?

 

KivApple
()

Gnome3 + клавиши настройки громкости

Форум — Desktop

Есть Gnome3 и есть клавиатура с мультимедийными клавишами, среди которых есть клавиши прибавления, убавления и выключения звука. В KDE они работали из коробки. В Gnome по какой-то причине не работают. При этом если открыть настройки комбинаций клавиш и попытаться их переопределить на другую комбинацию, то всё работает, но я бы хотел использовать мультимедийные клавиши, ибо это удобнее, чем какая-то комбинация. Но система их как будто не видит.

В чём может быть проблема?

 

KivApple
()

Caribou и русская раскладка

Форум — Talks

Я тут короче запилил патч, добавляющий русскую раскладку в стандартную клавиатуру Gnome Shell. Написал баг-репорт - https://bugzilla.gnome.org/show_bug.cgi?id=776980, но он уже неделю висит и никаких комментариев или изменений от разработчиков Gnome нет.

Быть может, на ЛОРе есть разработчики Gnome или люди, которые с ними общаются, может пнёте их? Или это нормально и через пару месяцев они отреагируют?

Мой патч это просто добавление XML-файла, там ревьюить особо нечего.

 

KivApple
()

Поведение SSD при сбое

Форум — Linux-hardware

Насколько я понял, разные SSD при обнаружении ошибок ведут себя весьма по-разному. Некоторые просто молча перестают определяться, другие молча считывают мусор вместо данных, третьи выдают нормальные ошибки чтения/записи и переходят в режим read-only.

Как определить какое поведение заложено производителем? Многие магазины пишут названия контроллеров. Где бы узнать, как этот контроллер себя ведёт?

Хотелось бы выбрать SSD, который относится к третьему или хотя бы второму типу. Категорически не хочу вариант, когда SSD просто перестаёт видится системой.

 

KivApple
()

QVKbd

Форум — Talks

Я тут короче запилил свою виртуальную клавиатуру с шахматами и поэтессами. Вдохновлялся kvkbd (но это не форк).

https://github.com/KivApple/qvkbd

Основные плюшки:

1) Содержит все необходимые клавиши, которые есть на среднестатистической клавиатуре

2) Легко в будущем добавить альтернативные раскладки, потому что сама раскладка реализована в виде QML и её можно редактировать графически в Qt Creator

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

4) Очень важная фича: размеры и положение клавиатуры запоминаются независимо для каждого разрешения экрана. Почему это важно? Представьте, что у вас планшет и вы используете поворот экрана. Логично, что при портретной ориентации экрана клавиатура должна располагаться совсем в других координатах, нежели чем в ланшафтной.

5) Нет привязок к KDE (в отличии от kvkbd). Требует только Qt и QtQuick. А ещё иксы (поддержку Wayland когда-нибудь добавлю). Используются расширения иксов Xkb и XRecord.

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

7) Имеет D-Bus интерфейс. Не знаю зачем, но вдруг кому-нибудь пригодится. Пока есть только 3 возможности - показать, скрыть и переключить видимость.

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

 , ,

KivApple
()

KDE и разные разрешения экрана

Форум — Desktop

Я использую Arch Linux с KDE5 на своём ноутбуке. Я могу использовать экран ноутбука, а могу подключить большой внешний монитор. При этом я настроил KDE таким образом, что экран ноутбука отключается и внешний монитор становится основным.

Логично, что 12.5 дюймов 1366 х 768 и 25 дюймов 2560 х 1080 удобнее использовать с несколько разными расположениями элементов панели.

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

 ,

KivApple
()

Программно сменить раскладку или узнать о её смене

Форум — Development

Для моей экранной клавиатуры требуется два действия:

1) Повесить какой-то обработчик, который будет вызываться при каждой смене раскладки клавиатуры. При этом окно клавиатуры само по себе никогда не получает фокус. Однако я через XRecord уже отлавливаю все нажатия клавиш (чтобы подсвечивать нажатые клавиши, а также определять изменение режима Caps Lock и Num Lock) и отслеживать глобально ещё какие-то события мне не составит труда.

2) Переключиться на следующую раскладку клавиатуры. То есть действие аналогичное нажатию Ctrl + Shift или какой-либо другой комбинации. Но не с помощью эмуляции соответствующих нажатий, а как-нибудь универсально (ведь вроде как можно иметь несколько раскладок, но не назначить комбинацию их смены и делать всё мышкой через виджет).

Сейчас я делаю это через DBus запросов к org.kde.keyboard и org.kde.KeyboardLayouts, но что-то мне подсказывает, что если запустить мою программу в другом DE, то это всё работать не будет. Хотелось бы более портабельный способ, использующий непосредственно API иксов.

Пробовал глобально ловить события KeymapNotify, но они почему-то не приходят (хотя KeyPress и KeyRelease я получаю, какому бы окну они не адресовались). Также читал, что такая встроенная фича Qt как QEvent::KeyboardLayoutChange не особо то работает.

Что ещё можно попробовать?

 , ,

KivApple
()

QML и масштабирование

Форум — Development

Допустим, есть QQuickWidget, в который загружен QML-объект. Размеры этого виджета могут изменяться (он помещён в Layout и лежит уже в нормальном C++ Qt окне). Хотелось бы, чтобы содержимое при этом масштабировалось. Пробовал вот такое:

QSize baseSize(m_quickWidget.rootObject()->width(), m_quickWidget.rootObject()->height());
float scaleX = (float)m_quickWidget.width() / baseSize.width();
float scaleY = (float)m_quickWidget.height() / baseSize.height();
float scale = qMin(scaleX, scaleY);
m_quickWidget.rootObject()->setScale(scale);

Содержимое виджета масштабируется, но весьма криво - центр трансформации как бы не совпадает с центром объекта, как следствие, он не только меняет ширину и высоту, но и съезжает влево-вверх (по факту его часть выходит за границу QQuickWidget и обрезается). При этом позиция виджета (m_quickWidget.rootObject()->position()) остаётся неизменной, так что вернуть его обратно её обнулением не получится.

Как сделать так, чтобы масштабирование работало нормально?

 ,

KivApple
()

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