LINUX.ORG.RU

индикатор раскладки клавиатуры

 , ,


1

1

всем привет.
накидал модуль к awesome, использую skb для получения текущей раскладки

local io = io
module("keyb")   
function getklayout()
            local fd = io.popen("skb a")
            local layout = fd:read()
            fd:close()
          return layout 
    end

в rc.lua
require("keyb")
keyinc = widget({type = "textbox"})
keyinc.text = keyb.getklayout()
версия awesome:
awesome v3.4.9 (Smack)
 • Build: Apr  9 2011 10:40:59 for i686 by gcc version 4.5.1 (builder@apiary.orion.altlinux.org)
 • D-Bus support: ✔

дистриб - SimplyLinux (AtlLinux который)

как использовать dbus при обновлении раскладки?



Последнее исправление: CYB3R (всего исправлений: 1)

Ответ на: комментарий от science

хм, у skb наверно нет, буду копать в сторону kbdd, спасибо

tanner
() автор топика
Ответ на: комментарий от tanner

По первой же ссылке в гугле по запросу "skb dbus" какой-то чувак у себя в бложике делает прям то, что тебе нужно да еще и с примерами и описаниями.

kernelpanic ★★★★★
()
Ответ на: комментарий от kernelpanic

видел, но у меня в /usr/share/dbus-1/interfaces нету никакого такого org.ayatana.dbusmenu.
org.kde.StatusNotifierItem есть, но в нем нет свойства XAyatanaNewLabel.

tanner
() автор топика
Ответ на: комментарий от kernelpanic

смотрел, новый трабл вылез )
kbdd запущен, dbus-monitor показывает, что событие произошло

signal sender=:1.8 -> dest=(null destination) serial=1028 path=/ru/gentoo/KbddService; interface=ru.gentoo.kbdd; member=layoutChanged
   uint32 0

в rc.lua прописано как по мануалу
dbus.request_name("session", "ru.gentoo.kbdd")
dbus.add_match("session", "interface='ru.gentoo.kbdd',member='layoutChanged'")
dbus.add_signal("ru.gentoo.kbdd", function(...)
      local data = {...}
      local layout = data[2]
      lts = {[0] = "Eng", [1] = "Rus"}
      keyinc.text = lts[layout]
end
)

но awesome никак не реагирует на изменение раскладки, гугл ничего внятного по этому поводу не говорит

tanner
() автор топика
Ответ на: комментарий от tanner

kbdd точно запущен? Как awesome запускаешь?

У меня вот такой виджет:

-- {{{ Keyboard layout
textKbLayout = widget ({ type = "textbox" })
textKbLayout.width = 25
textKbLayout.bg = theme.bg_normal
dbus.request_name("session", "ru.gentoo.kbdd")
dbus.add_match("session", "interface='ru.gentoo.kbdd',member='layoutChanged'")
textKbLayout.text = ' <span weight="bold" color="#dcdccc">' .. 'En' .. '</span>'
dbus.add_signal("ru.gentoo.kbdd",
                function(...)
                    local data = {...}
                    local layout = data[2]
                    lts = {[0] = "En", [1] = "Ru"}
                    textKbLayout.text = ' <span weight="bold" color="#dcdccc">' .. lts[layout] .. '</span>'
                    if layout == 0 then
                        textKbLayout.bg = theme.bg_normal
                    else
                        textKbLayout.bg = theme.bg_focus
                    end
                end)
-- }}}
Выхлоп dbus-monitor:
signal sender=:1.1 -> dest=(null destination) serial=32 path=/ru/gentoo/KbddService; interface=ru.gentoo.kbdd; member=layoutChanged
   uint32 0
signal sender=:1.1 -> dest=(null destination) serial=33 path=/ru/gentoo/KbddService; interface=ru.gentoo.kbdd; member=layoutNameChanged
   string "English (US)"

kernelpanic ★★★★★
()
Ответ на: комментарий от kernelpanic

разобрался: запуск kbdd был доступен только из-под рута, я его с правами рута и запустил, из-за этого awesome не мог достучаться до него ) спасибо за помощь )

tanner
() автор топика
Ответ на: комментарий от kernelpanic

Поясни пожалуйсто нубу как сделать переключатель:

виджет такойже, в wibox добавить смог - а вот что дальше делать не пойму. Как бинды вешать и что где запускать(kbdd, dbus)?

shm13
()
Ответ на: комментарий от shm13

В конце rc.lua:

-- Autostart
awful.util.spawn_with_shell(awful.util.getdir("config") .. "/autorun.sh")
В скрипте уже все что нужно.

$ grep awesome .xinitrc
exec dbus-launch awesome > ~/.cache/awesome/log
kernelpanic ★★★★★
()
Ответ на: комментарий от kernelpanic

никак, вычитал из мана что раскладку менять так:

You can change the layout with the following dbus-send command: dbus-send --dest=ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.set_ layout uint32:1

shm13
()
Ответ на: комментарий от kernelpanic

еще вычитал что kbdd берет настройки xkb, а вот это xkb я никогда и не где не настраивал. Возможно в этом проблема?

собственно вывод bdus-monitor после команды из мана:

method call sender=:1.22 -> dest=org.freedesktop.DBus serial=1 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=Hello signal sender=org.freedesktop.DBus -> dest=(null destination) serial=44 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged string ":1.22" string ":1.22" string «»

shm13
()
Ответ на: комментарий от kernelpanic

setxkbmap работатет, но виджет не переключаеся + отваливаются хоткеи в руской раскладке + нет привязки к окнам(хотя это не фатально).

shm13
()
Ответ на: комментарий от shm13

Ну, по моим наблюдениям он приемлемо работает на 2х раскладках на локальной клавиатуре. На виртуальных кажется вообще ничего толком не работает

vasily_pupkin ★★★★★
()
Ответ на: комментарий от shm13

что это может значить? ввожу команду: qdbus ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.set_layout

появляется сигнал, но теперь вылазит ошибка:

rvice ru.gentoo.kbdd.next_layout

Error: org.freedesktop.DBus.Error.NoReply

Did not receive a reply. Possible causes include:

the remote application did not send a reply, the

message bus security policy blocked the reply, the

reply timeout expired, or the network connection

was broken.

переключение конечно же не работает

shm13
()
Ответ на: комментарий от kernelpanic

Все настроил! Незнаю что я сделал, но все заработало, Причем как надо! (вроде как xorg.conf.d настроил)

Всем огромное спасибо!

P.S.

Линукс! Ты причина моего преждевременного старения!

shm13
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.