LINUX.ORG.RU

Сообщения gentoo_root

 

C++, std::function, шаблоны, что я делаю не так?

Форум — Development
#include <functional>
#include <algorithm>
#include <vector>

template<typename Iterator>
void test(Iterator begin, Iterator end, std::function<void (Iterator, Iterator)> func)
{
}

template<typename Iterator>
void mysort(Iterator begin, Iterator end)
{
}

int main()
{
        std::vector<int> data;
        test(data.begin(), data.end(), std::sort<std::vector<int>::iterator>);
        test(data.begin(), data.end(), mysort<std::vector<int>::iterator>);
        return 0;
}

Первый вызов функции test компилируется, второй — нет, сообщение об ошибке:

test.cpp: В функции «int main()»:
test.cpp:19:67: ошибка: нет соответствующей функции для вызова «test(std::vector<int>::iterator, std::vector<int>::iterator, <unresolved overloaded function type>)»
  test(data.begin(), data.end(), mysort<std::vector<int>::iterator>);
                                                                   ^
test.cpp:19:67: замечание: candidate is:
test.cpp:6:6: замечание: template<class Iterator> void test(Iterator, Iterator, std::function<void(Iterator, Iterator)>)
 void test(Iterator begin, Iterator end, std::function<void (Iterator, Iterator)> func)
      ^
test.cpp:6:6: замечание:   template argument deduction/substitution failed:
test.cpp:19:67: замечание:   mismatched types «std::function<void(Iterator, Iterator)>» and «void (*)(__gnu_cxx::__normal_iterator<int*, std::vector<int> >, __gnu_cxx::__normal_iterator<int*, std::vector<int> >)»
  test(data.begin(), data.end(), mysort<std::vector<int>::iterator>);
                                                                   ^
test.cpp:19:67: замечание:   could not resolve address from overloaded function «mysort<std::vector<int>::iterator>»
test.cpp: In instantiation of «void test(Iterator, Iterator, std::function<void(Iterator, Iterator)>) [with Iterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >]»:
test.cpp:18:70:   required from here
test.cpp:6:6: предупреждение: параметр «begin» не используется [-Wunused-parameter]
 void test(Iterator begin, Iterator end, std::function<void (Iterator, Iterator)> func)
      ^
std::sort объявлен так:
  template<typename _RandomAccessIterator>
    inline void
    sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
Кроме inline, нет никаких отличий от mysort, но дело не в inline (пробовал и его добавлять к mysort).

Заставить код компилироваться можно, например, так:

test<std::vector<int>::iterator>(data.begin(), data.end(), mysort<std::vector<int>::iterator>);

Но почему в случае std::sort происходит разворачивание шаблона нормально, а в случае mysort нет?

gcc 4.8.2

 

gentoo_root
()

При входящем звонке звук идёт и в наушники, и в динамики

Форум — Mobile

Samsung i9192, Android 4.2.2, стандартная прошивка, есть root. При подключённых проводных наушниках при входящем вызове звук рингтона также идёт на динамики. Хочу, чтобы при воткнутых наушниках все звуки шли только на наушники. Как это сделать?

 

gentoo_root
()

Выбор телефона

Форум — Mobile

Подскажите, пожалуйста, GSM-телефон, максимально удовлетворяющий следующим требованиям:

  • Поддержка двух SIM-карт
  • Формат обеих карт mini-SIM (никаких micro-SIM!)
  • Возможность прошивки из Linux
  • Очень желательно отсутствие фич, которые не работают без Windows и Mac OS X
  • Возможность root-доступа к телефону
  • Поддержка Wi-Fi: IEEE 802.11 a/b/g/n
  • Поддержка Bluetooth 4.0 и BLE: профили A2DP, DUN, FTP, GATT, OPP, PAN (поддержка GATT нужна для собственного приложения, поэтому должно быть API для работы с этим профилем; PAN необходим, чтобы раздавать интернет телефона на другое устройство и чтобы другое устройство раздавало интернет на телефон, т.е. хочу, чтобы работало в обе стороны)
  • Поддержка NFC
  • Воспроизведение музыки (FLAC, OGG) и видео, поддержка DLNA (сервер, плеер и control point)
  • Поддержка OpenVPN-клиента
  • Поддержка клиентов SSH, samba, FTP
  • Зарядка через USB, в т.ч. в выключенном состоянии
  • Желательно, чтобы upower показывал уровень батареи телефона при его подключении к компьютеру
  • В телефонной книжке должна быть возможность указывать несколько номеров для одного контакта
  • Скорее всего это будет Android, поэтому желательно, чтобы на этом девайсе хорошо работал Cyanogenmod
  • Желательно, чтобы спереди был светодиод, который показывает, были ли пропущенные события
  • Желательно, чтобы была удобная панелька с кнопочками для включения и настройки Wi-Fi и Bluetooth
  • Мне не нравится оболочка HTC Sense, желательно, чтобы её не было на этом телефоне
  • Бюджет до $400, но рассмотрю все варианты

Пока что нашёл такое (Samsung i9082), но оно не удовлетворяет некоторым требованиям, ищу, есть ли что-то лучше.

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

  • Поддержка IEEE 802.11 a
  • Поддержка Bluetooth PAN для подключения к другому устройству, раздающему интернет (насколько я понял, Android это не умеет, но хотелось бы)
  • Поддержка NFC
  • upower
  • Светодиод спереди

Всем заранее спасибо.

 ,

gentoo_root
()

Jabber-клиент

Форум — Desktop

Разыскиваю jabber-клиент для linux и windows с поддержкой XEP-0166 (jingle) и XEP-0136 (message archiving, хранение истории сообщений на сервере). Требуется, чтобы эти возможности работали как на linux, так и на windows.

Нашёл пока только vacuum-im (он умеет message archiving, но не умеет jingle вообще) и gajim (он умеет и то, и то, но только на linux, а на венде нет jingle).

Какие есть ещё варианты?

 , ,

gentoo_root
()

XBMC

Форум — Desktop

Установил себе XBMC 11 Eden, но пока есть несколько вопросов.

  1. Там вообще есть регулятор громкости? Не нашёл его ни при просмотре видео, ни при прослушивании музыки. Нашёл только аддон Audio Mixer, но чтобы до него добраться, нужно сделать очень много телодвижений, а хотелось бы прямо с экрана просмотра видео регулировать громкость.
  2. При вставке DVD-диска с кучкой avi появляется кнопка «Смотреть диск». Если на неё нажать, то фильмы начинают проигрываться в непонятном порядке (порядок каждый раз одинаковый, но он далёк от лексикографического), при этом видно только имя текущего файла и есть кнопки для переключения вперёд и назад. При этом даже нет никакого намёка на плейлист. Как-то можно по-человечески сделать так, чтобы можно было вставить диск и увидеть список файлов на нём, нажать на нужный файл и смотреть его?
  3. У меня кривая видеокарта, она не переживает выход из ждущего режима (если после выхода пользоваться только текстовой консолью 80x25, то всё работает, но при попытке перейти в графический режим экран станет чёрным до перезагрузки). С помощью polkit я запретил всем пользователям через upower делать suspend и hibernate, но кнопки в меню XBMC остались (естественно, реакции на них нет). Также осталась кнопка «Выход», но т.к. у меня nodm, при нажатии на «Выход» XBMC снова перезапускается. Как убрать эти кнопки?

 

gentoo_root
()

WINE и док

Форум — Desktop

Имеется KDE с плазмоидом icontasks вместо дока. Т.к. у всех окон программ, запущенных под вайном, установлен класс окна «Wine», icontasks их все группирует в одну кнопку.

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

Существует ли какое-нибудь быстрое решение?

Я видел, ЕМНИП, в bamfdaemon, что для вайна нужны отдельные костыли для распознавания приложений, т.к. класс окон у них одинаковый. Судя по поведению icontasks, их нет в libtaskmanager. Существует ли другое решение, кроме допиливания libtaskmanager? Может, что-то можно сделать с помощью kwin (поменять класс окна?)?

 , ,

gentoo_root
()

NetworkManager не готов

Форум — Talks

Подключил к своему компу телефон HTC с андроидом. Нажал на телефоне на кнопку для включения reverse tethering over usb, чтобы на телефоне пользоваться интернетом с компа. NetworkManager на удивление увидел телефон, создался интерфейс usb0, NM получил по DHCP IP-адрес от сервера на телефоне. Но на этом всё и закончилось. Андроид упорно не видел, что подключение состоялось, а NM не настроил NAT в iptables для раздачи интернета.

Оказалось, что телефон ожидает магической последовательности байт на порту 6000 от компа, означающей, что комп подключился и раздаёт интернет. Ладно, допустим, можно написать соответствующий скрипт и вызывать его при поднятии подключения — для этого в убунте был плагин к NM (хоть я и без понятия, как им пользоваться на других дистрибутивах, но думаю, с этим можно разобраться). Проблему здесь вызывает только меняющийся каждый раз IP-адрес телефона, но его можно выдернуть из /var/lib/dhclient/dhclient-*-usb0.lease.

С iptables всё хуже: здесь неправильно аналогичным скриптом в if-up.d настраивать NAT, потому что NM тоже меняет iptables и ничего не знает о внесённых нами изменениях. Кажется, в настоящее время NM не трогает чужие записи в iptables, но было бы неплохо иметь возможность в настройках поставить галочку «раздавать интернет» независимо от настроек IP-адреса, а сейчас есть возможность раздавать интернет через NM только тогда, когда этот же комп назначает себе адрес 10.42.0.1 (который, кстати, никак не поменять) и является DHCP-сервером в сети, куда раздаётся интернет, что не соответствует данной ситуации.

Ещё хуже с DUN over bluetooth. Мой телефон Nokia не поддерживает одну из AT-команд, которые посылает ему NM, поэтому соединение не удаётся. И никак это не исправить (кроме как пропатчить modem-manager у себя локально, что я и делал, когда мне это было нужно), потому что настроек посылаемых AT-команд у NetworkManager'а нет. Да они же были даже в Windows XP (а, может быть, и гораздо раньше, этого не помню). Видимо, разработчики NM решили пойти по стопам GNOME и даже обойти его: они не выпиливают нужные фичи, они их просто изначально не запиливают и не собираются.

Совсем плохо с раздачей интернета через Wi-Fi. Раздавать в master mode NM в принципе не умеет. В ad-hoc у него это получается только с шифрованием WEP, а если установить WPA, то просто ничего не будет работать. Тем временем, я видел ноут с вендой 7, который стандартными средствами создавал точку доступа с WPA2 (был ли это master mode или ad-hoc, я не знаю).

Кажется, довольно давно развивается проект, а новых возможностей с новыми версиями и незаметно. Таких элементарных вещей, как настройки, до сих пор нет, а там, где они есть, они сильно ограничены. Нет нормальной поддержки Wi-Fi. И это я уже не говорю о всяких специфичных вещах вроде vlan, мостов и т.п., а только о повседневно нужных возможностях, которыми пользуется обычный пользователь на ноутбуке.

 , ,

gentoo_root
()

Пишу из горящего танка

Форум — Desktop

Обновил гном 3.4 на арче до гнома 3.6. Перезагрузился, сразу меня порадовал плавный переход от консоли к gdm (а это значит, что можно устанавливать plymouth и всё будет красиво) и новый дизайн gdm. Залогинился, обнаружил, что в настройках беспроводных сетей теперь видно все сети, к которым я подключался, и их оттуда можно удобно удалять всегда, а не только тогда, когда подключение активно. Отвалились все расширения, кроме скрывалки значка accessibility. Кажется, всё замечательно, но тут я заметил...

...что у меня одна раскладка. Тут я вспомнил, что читал на ЛОРе о сломанной переключалке, но потом читал, что её починили. Не тут-то было. Добавление раскладки ru+ruu никак не действует - индикатора просто нет, переключение не работает. Для проверки добавил ru+winkeys - то же самое. Раскладка будет увидена только тогда, когда она без модификации, например, просто ru. Меня же это не устраивает, т.к. я пользовался русско-украинской раскладкой. Дальше - больше. Переключать раскладки теперь можно только мышкой или хоткеем модикикатор+клавиша, например, Ctrl+Alt+K. Естественно, это жутко неудобно, поэтому я лезу в gnome-tweak-tool за нормальным переключателем, но не тут-то было: там есть только модификатор+модификатор, а переключения по Caps Lock больше нет. Вот что говорят разработчики по этому поводу:

Rui Matos

AFAICT, it's not possible to do this currently from an X client without also triggering Caps Lock itself, that's why I didn't add combinations with CapsLock.

и ещё:

Rui Matos

Wayland should allow us to that.

А всё из-за того, что они решили не использовать средства xkb для переключателя раскладки, а ловить хоткеи самостоятельно. Мало того, что теперь нельзя использовать самый удобный способ переключения, так ещё и их переключалка жестоко лагает. Сейчас повесил на Ctrl+Shift, но при нажатии оного окно Firefox становится блеклым (как неактивное) на 2 секунды, после этого возвращается обратно, после чего ещё проходит секунда до реального переключения раскладки (а в течение этих 3 секунд можно продолжать печатать старой раскладкой). Куда это вообще годится? И ещё одна проблема, более фееричная: переключалка клавиатуры в таком виде не работает в режиме overview (там поиск есть, которым теперь стало невозможно пользоваться) и в режиме блокировки экрана. Если бы нельзя было переключить раскладку мышкой на экране блокировки, я бы вырубил комп и не дописал бы это сообщение. Также теперь нельзя включить misc:typo или раскладку ru+ruu, поэтому в этом сообщении я не смог использовать нормальные кавычки, троеточие, и тире.

Может, всё не так безнадёжно и где-то есть патчики для возвращения старого поведения?

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

Хотел было свалить на Trinity, но вспомнил, что переключалка раскладок там тоже немного лагала, и заметил, что до сих пор они не выпилили зависимость от hal. А ведь KDE3 было лучшим DE, которое видел мой нетбук в своё время.

Печально всё-таки, что некогда хороший Линукс скатился до состояния «не готов».

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

 , ,

gentoo_root
()

Maximize terminal

Форум — Development

Известно, что gnome-terminal ресайзится не плавно по 1 пикселю, а дискретно на кратное размеру знакоместа число пикселей, например, по 9 пикселей по ширине и по 18 пикселей по высоте, поэтому его окну нельзя задать произвольный размер. Но тем не менее, современные оконные менеджеры позволяют развернуть окно терминала на весь экран (максимизировать) так, что не остаётся пустого места вокруг окна и размер этого окна не удовлетворяет требованиям к дискретному ресайзу.

Проблема такая: когда я пытаюсь из собственного оконного менеджера с помощью XConfigureWindow() задать размер окну терминала, равный размеру экрана (но не помещающий целое число знакомест), терминал начинает вести себя странно: его главное окно не отрисовывается вообще, т.е. ввода и промпта не видно, а если открыть меню, то после закрытия след от него останется. Я ловлю ConfigureRequest'ы и смотрю в них на _NET_WM_STATE: если там есть _NET_WM_MAXIMIZED_VERT или _NET_WM_MAXIMIZED_HORZ, то я соответствующим образом меняю координаты и размер окна и вызываю XConfigureWindow() с изменённым размером, иначе я вызываю XConfigureWindow() с теми координатами и размером, что мне пришли в сообщении.

После первого XConfigureWindow() с максимизированным окном терминал пытается послать ещё один ConfigureRequest с чуть меньшими координатами, на что WM делает ещё один такой же, как и первый, XConfigureWindow().

Терминал запускаю так: «DISPLAY=:1 gnome-terminal --maximize».

Reparent окон я пока не делаю, рамки не рисую.

Что я делаю не так? Почему с другими оконными менеджерами типа openbox нет такой проблемы? В исходниках openbox и xfwm4 не нашёл явного решения. Как исправить проблему в моём WM?

 , ,

gentoo_root
()

QMenuBar из QMenu *

Форум — Development

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

foreach (QAction *action, menu->actions()) {
    QMenu *submenu = action->menu();
    if (submenu) {
        menuBar->addMenu(submenu);
    } else {
        menuBar->addAction(action);
    }
}

Этот код создаёт нужный мне QMenuBar. Проблема в том, что QMenu, из которого он создан, может изменяться через время, и эти изменения никак не отражаются в QMenuBar (логично, если он один раз создан и всё). Нужно же сделать так, чтобы при любых изменениях первого уровня объекта QMenu соответствующим образом менялся и QMenuBar. Проблема в том, что у QMenu нет сигналов, которые emit при изменениях. Задача усложняется тем, что объект QMenu создаётся в отдельной библиотеке и изменять её крайне нежелательно, поэтому унаследовать QMenu и override в нём методы типа addAction, чтобы они вызывали сигналы, — это крайняя мера. Есть ли другие способы отслеживания изменений QMenu?

 

gentoo_root
()

unbind/bind device from/to driver

Форум — Development

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

echo -n manual > /sys/bus/serio/devices/serio1/bind_mode
echo -n serio1 > /sys/bus/serio/drivers/psmouse/unbind
echo -n manual > /sys/bus/serio/devices/serio1/bind_mode
echo -n none > /sys/bus/serio/drivers/psmouse/drvctl
echo -n auto > /sys/bus/serio/devices/serio1/bind_mode
echo -n reconnect > /sys/bus/serio/drivers/psmouse/drvctl
echo -n manual > /sys/bus/serio/devices/serio1/bind_mode
echo -n psmouse > /sys/bus/serio/devices/serio1/drvctl
Нашёл нечто похожее в коде модуля vboxpci из VirtualBox'а, но там идёт напрямую запись в файлы, что, мне кажется, не является самым правильным способом:
    if (fDetach)
    {
        char*              szCmdBuf;
        char*              szFileBuf;
        struct file*       pFile;
        int                iCmdLen;
        const int          cMaxBuf = 128;
        const struct cred *pOldCreds;
        struct cred       *pNewCreds;

        /*
         * Now perform kernel analog of:
         *
         * echo -n "10de 040a" > /sys/bus/pci/drivers/pci-stub/new_id
         * echo -n 0000:03:00.0 > /sys/bus/pci/drivers/nvidia/unbind
         * echo -n 0000:03:00.0 > /sys/bus/pci/drivers/pci-stub/bind
         *
         * We do this way, as this interface is presumingly more stable than
         * in-kernel ones.
         */
        szCmdBuf  = kmalloc(cMaxBuf, GFP_KERNEL);
        szFileBuf = kmalloc(cMaxBuf, GFP_KERNEL);
        if (!szCmdBuf || !szFileBuf)
            goto done;

        /* Somewhat ugly hack - override current credentials */
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29)
        pNewCreds = prepare_creds();
        if (!pNewCreds)
                goto done;

        pNewCreds->fsuid = 0;
        pOldCreds = override_creds(pNewCreds);
#endif

        RTStrPrintf(szFileBuf, cMaxBuf,
                              "/sys/bus/pci/drivers/%s/new_id",
                              PCI_STUB_MODULE);
        pFile = vboxPciFileOpen(szFileBuf, O_WRONLY);
        if (pFile)
        {
            iCmdLen = RTStrPrintf(szCmdBuf, cMaxBuf,
                                  "%04x %04x",
                                  uVendor, uDevice);
            /* Don't write trailing \0 */
            vboxPciFileWrite(pFile, 0, szCmdBuf, iCmdLen);
            vboxPciFileClose(pFile);
        }
        else
            printk(KERN_DEBUG "vboxpci: cannot open %s\n", szFileBuf);

        iCmdLen = RTStrPrintf(szCmdBuf, cMaxBuf,
                              "0000:%02x:%02x.%d",
                              uBus, uDevFn>>3, uDevFn&7);

        /* Unbind if bound to smth */
        if (pIns->szPrevDriver[0])
        {
            RTStrPrintf(szFileBuf, cMaxBuf,
                        "/sys/bus/pci/drivers/%s/unbind",
                         pIns->szPrevDriver);
            pFile = vboxPciFileOpen(szFileBuf, O_WRONLY);
            if (pFile)
            {

                /* Don't write trailing \0 */
                vboxPciFileWrite(pFile, 0, szCmdBuf, iCmdLen);
                vboxPciFileClose(pFile);
            }
            else
                printk(KERN_DEBUG "vboxpci: cannot open %s\n", szFileBuf);
        }

        RTStrPrintf(szFileBuf, cMaxBuf,
                    "/sys/bus/pci/drivers/%s/bind",
                    PCI_STUB_MODULE);
        pFile = vboxPciFileOpen(szFileBuf, O_WRONLY);
        if (pFile)
        {
            /* Don't write trailing \0 */
            vboxPciFileWrite(pFile, 0, szCmdBuf, iCmdLen);
            vboxPciFileClose(pFile);
        }
        else
            printk(KERN_DEBUG "vboxpci: cannot open %s\n", szFileBuf);

#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29)
        revert_creds(pOldCreds);
        put_cred(pNewCreds);
#endif

      done:
        kfree(szCmdBuf);
        kfree(szFileBuf);
    }
Судя по комментарию «We do this way, as this interface is presumingly more stable than in-kernel ones» существует и другой способ, родной для ядра, без записи в ФС. И костыль, зависимый от версии ядра, мне тоже не нравится. Вопрос в том, как это сделать по-человечески?

 , ,

gentoo_root
()

Отключить event device

Форум — Linux-hardware

Необходимо отключить/включить тачпад в Linux полностью во всей системе. Как это сделать?

Способы с отключением тачпада в драйвере для иксов не годятся — нужно именно заблокировать поступление данных с event device. Планируется отключать/включать из ядерного модуля.

 , ,

gentoo_root
()

ext4 на USB-винчестере

Форум — Linux-hardware

Имеется USB-винчестер WD и желание подключить его к роутеру, работающему под OpenWrt. Также есть проблема с файловой системой (не только под OpenWrt, но и под любым Линуксом): из ext* нормально работает только ext2, но её использовать невозможно, потому что я так и не дождался окончания проверки файловой системы на 2 ТБ (ext4 проверяется значительно быстрее).

С ext4 большая проблема: при монтировании её в read-write что-то непрерывно пишет на винчестер (в tune2fs -l показывается увеличение Lifetime writes, а светодиод винчестера непрерывно мигает). Меня это напрягает, т.к. винчестер не может уйти в спячку и теряется производительность из-за непрерывной записи. Файлов никаких нет. Отключение журнала не помогает. Опции barrier/nobarrier и commit= не помогают. Пробовал ext3, она тоже что-то пишет, но не непрерывно, а периодически, поэтому винт тоже не останавливается.

При этом проблема непрерывной записи на ext4 проявляется только на USB-винчестере, а на SATA-винчестере и на ФС в файле такой проблемы нет. Кто-то сталкивался? Как сделать так, чтобы ext4 не писала непрерывно на USB-винчестер?

 , , ,

gentoo_root
()

pkexec crashes with SIGTERM

Форум — General

При попытке запустить что угодно через pkexec процесс ловит SIGTERM (код возврата 143).

$ pkexec /usr/libexec/gsd-backlight-helper --set-brightness 448
zsh: terminated  pkexec /usr/libexec/gsd-backlight-helper --set-brightness 448

При этом с некоторой вероятностью (очень маленькой, 1 из 20 примерно) команда выполняется успешно.

ConsoleKit выпилен, заменён на systemd, но это не должно быть важно.

Установлен polkit 0.105.

Как исправить?

Проблему обнаружил, когда gnome-settings-daemon криво регулировал яркость при нажатии соответствующих клавиш клавиатуры.

 

gentoo_root
()

udev bugtracker

Форум — Talks

У меня готовы патчи на ядро, udev и gnome-settings-daemon для улучшения поддержки ноутбука Lenovo IdeaPad Z570 в Линуксе. Изменения касаются специальных клавиш (теперь работают все, а не только некоторые), управления вентилятором (4 профиля, такие же, как в Lenovo Energy Management Utility для Windows), возможности отключения тачпада по комбинации клавиш.

Вопрос следующий: куда их лучше отправить?

Патч на ядро, насколько я понимаю, надо отправить в рассылку на lkml.org. Патч для gnome-settings-daemon, по идее, надо в http://bugzilla.gnome.org/. Я прав, или есть другие места, которые лучше?

А вот патч на udev я даже не представляю, куда слать: нашёл только их git-репозиторий, в котором последний коммит был где-то в апреле. Они ещё собирались объединять код с systemd, но в systemd 44 пока что нет кода udev. Поэтому самый главный вопрос: куда отправлять патч на udev?

 , ,

gentoo_root
()

Лаги при перемещении QGraphicsItem

Форум — Development

Имеется QGraphicsScene с расположенным на нём QGraphicsItem. На QGraphicsItem стоит флаг ItemIsMovable, поэтому его можно двигать мышкой. Отображается это всё через QGraphicsView. Если у последнего viewport'ом является QWidget (по умолчанию), то всё нормально работает. Если же сделать так:

m_view->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers), this));

то становится заметным сильная задержка перемещения item'а относительно перемещения мыши. Т.е. если быстро передвинуть мышь, то item не успевает сразу переместиться за мышью, а делает это с задержкой.

Подозреваю, что проблема в том, что OpenGL каждый раз перерисовывает сцену при изменениях, поэтому и появляются лаги при частом перемещении item'а на 1 пиксель за мышью. Можно ли как-то исправить ситуацию с учётом этого, или придётся отказаться от отрисовки через OpenGL? Какие вообще преимущества отрисовки QGraphicsView через QGLWidget перед отрисовкой через QWidget?

 ,

gentoo_root
()

Xfce4 @ iPod touch 4G

Галерея — Скриншоты

На скриншоте наблюдается Xfce 4.8, запущенное в X-сервере kdrive, вкомпиленном в iSSH, запущенном на айподе.

Поскольку разрешение X-сервера не настраивается и захардкодено на 1024x768 (сейчас написал разработчику iSSH по этому поводу), а разрешение экрана айпода меньше, то весь иксовый дисплей не помещается на экран и приходится прокручивать его, но работать вполне можно.

 , , ,

gentoo_root
()

Разблокировка экрана

Форум — Desktop

Когда я нажимаю Ctrl-Alt-L, запускается хранитель экрана и экран блокируется. После этого другой пользователь нажимает «New login», его переключает на другой VT, в котором запускается окно входа lightdm. Он зашёл, поработал и тоже заблокировал экран. Потом возвращаюсь я, вижу чужой заблокированный экран, хочу разблокировать своего пользователя. Ничего не остаётся, кроме как нажать «New login» (переключение консолей по Ctrl-Alt-F* заблокировано). Попадаю в окно входа lightdm, «логинюсь» своим пользователем, меня переключает на мой VT, но (!) здесь меня ожидает xscreensaver и приходится вводить свой пароль дважды.

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

Трудность такова: в ubuntu используется gnome-screensaver, который можно разблокировать командой «gnome-screensaver-command -d». С xscreensaver же такой фокус не прокатывает (его нельзя разблокировать командой, кроме как перезапуском демона), поэтому вариант его замены тоже возможен. Но заменить его на gnome-screensaver не получится, поскольку он требует запущенного gnome-session, а он не запускается при запущенном xfce4-session. kscreensaver тоже не годится, потому что потянет за собой полKDE. Какие ещё есть варианты программ, блокирующих экран и разблокирующих его при вводе пароля на заблокированном экране или экране входа lightdm?

 , ,

gentoo_root
()

Вышел Music Pause Daemon

Новости — Linux General
Группа Linux General

Вчера на github появились исходники открытого проекта musicpaused. Основное предназначение программы — приостанавливать воспроизведение музыки при вынимании наушников так же, как это делают мобильные устройства на ОС Android и iOS. Многие хотели бы иметь такую же функциональность и на своих ноутбуках и компьютерах, и теперь это возможно. Также она может показывать уведомления на рабочем столе при вставке и вынимании разъёмов наушников, микрофона и некоторых других. Для Линукса подобных программ раньше не было.

Программа состоит из 3 демонов:

  • jacklistener — монитор событий изменения состояния разъёмов. Читает события из event-device'ов и передаёт их в виде сигналов на системную шину D-Bus;
  • musicpaused — демон, работающий с правами пользователя и приостанавливающий воспроизведение музыки при получении сигнала о вынимании наушников от jacklistener. Может управлять всеми плеерами, поддерживающими интерфейс MPRIS;
  • jacknotifier — демон, работащий с правами пользователя и показывающий уведомления на рабочем столе при получении сигналов от jacklistener.

Такая организация программы позволяет легко расширять её функциональность за счёт написания дополнительных демонов, выполняющих какую-то одну задачу и взаимодействующих с сервером jacklistener.

Программа работает, если ядро сообщает об изменении состояния разъёмов через event-интерфейс. Для аудиокарт Intel HDA необходимо включить в конфигурации ядра опцию CONFIG_SND_HDA_INPUT_JACK.

На гитхабе доступны исходники и ебилды для Gentoo, а также инструкции по установке.

Исходники jacklistener

Исходники jacknotifier

>>> Исходники musicpaused

 autopause, , , ,

gentoo_root
()

[ubuntu] [upower] no hibernate

Форум — Desktop

Имеется ubuntu 12.04, в ней недоступен спящий режим. В меню соответствующего пункта нет, в настройках действия при нажатии кнопки питания он серый и не выбирается. Выбор через dconf-editor не помогает, вместо него происходит переход в ждущий режим.

Команда pm-hibernate от рута работает нормально, происходит переход в спящий режим и пробуждение из него. Но какая-то проблема с upower: команда

qdbus --system org.freedesktop.UPower /org/freedesktop/UPower org.freedesktop.UPower.Hibernate
возвращает
Error: org.freedesktop.UPower.GeneralError
not authorized
, если выполнять её от пользователя. От рута она работает нормально. Очевидно, что нет прав.

Но, что очень странно, команда

qdbus --system org.freedesktop.UPower /org/freedesktop/UPower org.freedesktop.UPower.Suspend
работает и от рута, и от пользователя. В настройках polkit нет ни намёка на то, чтобы ограничить hibernate, а suspend разрешить. Конфиги тут:

/usr/share/polkit-1/actions/org.freedesktop.upower.policy

/etc/dbus-1/system.d/org.freedesktop.UPower.conf

Как сделать, чтобы пользователя пускал polkit не только в suspend, но и в hibernate?

 

gentoo_root
()

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