#Lua #D-Bus #dbus #GTK #gobjectintrospection
@rur @rf
Ребят, нужна помощь с написанием кода.
Задача: Хочу написать на Lua простой скрипт, создающий D-Bus службу (В идеале org.kde.StatusNotifierWatcher) , к которой можно достучаться через dbus-send или gdbus. Пробовал через ИИ, который даже написал, но... Сталкиваюсь с нккоторыми ошибками, а именно:
1)
luajit: ./proxyserver.lua:62: bad argument #5 to 'bus_own_name' (GObject.Closure expected, got function)
stack traceback:
[C]: in function 'bus_own_name'
./proxyserver.lua:62: in function 'start'
main.lua:25: in main chunk
[C]: at 0x55b22012ed70Вызывается здесь:
Gio.bus_own_name(
Gio.BusType.SESSION,
interface_name,
Gio.BusNameOwnerFlags.NONE,
on_bus_acquired,
on_name_acquired,
on_name_lostИз ошибки ясно, что
bus_own_name ожидал
GObject.Closure, а получил функцию(-и). Спросил у ИИ, стоит ли заворачивать в GObject функцию, на что получил отказ по причине "GObject умеет сам заворачивать, если делать автоматически" и прилагает Вариант 1
(ссылка) (который у меня ± в коде). Ладно, обернул сам...
Но теперь сталкиваюсь со второй ошибкой:(luajit:30598): Lgi-WARNING **: 00:28:04.678: Error raised while calling 'lgi.cbk (function: 0x7f4efadd87c0): GObject': ./proxyserver.lua:51: bad argument #4 to 'register_object' (GObject.Closure expected, got userdata)
Вызывается здесь: local on_bus_acquired = function(connection, name)
connection:register_object('/org/example/MyObject', iface, vtable)
end
Та же ошибка, но теперь получает не функцию, а userdata. На этот раз предлагает два варианта (ссылка): Обернуть в
GObject.Closure или преобразовать vtable в
Gio.DBusInterfaceVTable (Что у меня это УЖЕ есть). Ладно, обернём в
GObject.Closure ещё раз.
Ещё один запуск... Запустился без ошибок. Звучит неплохо, но а теперь самая мякотка...
Отправить сигнал:dbus-send --session --print-reply \
--dest=org.example.MyInterface \
/org/example/MyObject \
org.example.MyInterface.SayHelloили
gdbus call --session \
--dest org.example.MyInterface \
--object-path /org/example/MyObject \
--method org.example.MyInterface.SayHello
И вот тут ловим ошибку:(luajit:25911): Lgi-WARNING **: HH:MM:SS.ms : Error raised while calling 'lgi.cbk (function :0x7f5b60662de0): GObject': /usr/share/lua/5.1/lgi/override/GObject-Closure.lua:286: attempt to call upvalue 'target' (a userdata value) И вот тут я встал. Вроде всё запустилось, но сигнал принимает с ошибкой. ЧЯДНТ (Кроме того, что я использовал ИИ для решения этой задачи)?
На всякий случай:
OS: Artix Linux / Void Linux
Packages (Artix):dbus-glib 0.114-1
dbus 1.16.2-1.1
lua-lgi 0.9.2-14
lua51-lgi 0.9.2-14
glib2 2.88.0-1
gobject-introspection 1.86.0-2
Packages (Void):dbus 1.16.2_2
lua51-lgi 0.9.2_6
glib2 2.88.0_1
gobject-introspection 1.86.0_2