Je suis très novice en matière de gjs et je souhaite interfacer dbus. Je veux créer un service et l'écouter.
Un petit exemple ou un guide serait utile. Nous vous remercions de votre attention.
Je suis très novice en matière de gjs et je souhaite interfacer dbus. Je veux créer un service et l'écouter.
Un petit exemple ou un guide serait utile. Nous vous remercions de votre attention.
J'ai lu que Gnome s'oriente vers Java script (GJS) pour une grande partie de son bureau et réduit la quantité de C++ et de Python. J'ai donc trouvé cette question particulièrement intéressante aujourd'hui.
Voici un exemple exemple Java script et je vais l'essayer moi-même. Dans cet exemple, vous apprendrez à créer un client D-Bus pour vous connecter à un service, vous apprendrez à appeler des méthodes, à vous connecter à des signaux et à obtenir des propriétés du service. L'exemple utilise le service D-Bus qui gère le rétroéclairage du clavier :
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
// This the D-Bus interface as XML
const KbdBacklightInterface = '<node>\
<interface name="org.freedesktop.UPower.KbdBacklight"> \
<method name="SetBrightness"> \
<arg name="value" type="i" direction="in"/> \
</method> \
<method name="GetBrightness"> \
<arg name="value" type="i" direction="out"/> \
</method> \
<method name="GetMaxBrightness"> \
<arg name="value" type="i" direction="out"/> \
</method> \
<signal name="BrightnessChanged"> \
<arg type="i"/> \
</signal> \
</interface> \
</node>';
// Declare the proxy class based on the interface
const KbdBacklightProxy = Gio.DBusProxy.makeProxyWrapper(KbdBacklightInterface);
// Get the /org/freedesktop/UPower/KbdBacklight instance from the bus
let kbdProxy = new KbdBacklightProxy(
Gio.DBus.system,
"org.freedesktop.UPower",
"/org/freedesktop/UPower/KbdBacklight"
);
// You can use proxy.<method>Sync syntax to
// call the D-Bus method in a Sync way
print("The max brightness of your keyboard is " + kbdProxy.GetMaxBrightnessSync());
// Or you can use the syntax proxy.<method>Remote
// to call the method in an Async way
kbdProxy.GetBrightnessRemote(function(currentBrightness) {
print("The current keyboard brightness is " + currentBrightness);
});
// Connecting to a D-Bus signal
kbdProxy.connectSignal("BrightnessChanged", function(proxy) {
let newBrightness = proxy.GetBrightnessSync();
print("The keyboard brightness has been changed, new brightness is " + newBrightness);
});
// Also you can get properties value using this syntax
// let property = proxy.PropertyName;
// Or you can set a property value
// proxy.PropertyName = "new value";
let loop = new GLib.MainLoop(null, false);
loop.run();
Si ce n'est pas déjà fait, installez gjs :
sudo apt update && sudo apt install gjs
Créez un répertoire pour vos scripts :
mkdir ~/javascript
Utilice gedit
pour créer l'exemple de script ci-dessus et le sauvegarder :
gedit ~/javascript/dbusclient.js
Exécutez-le maintenant :
cd ~/javascript
gjs dbusclient.js
WIP Erreurs signalées (je les corrigerai et reviendrai sur cette Q&R avec les résultats) :
(gjs:10134): Gjs-WARNING **: JS ERROR: Gio.DBusError: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface 'org.freedesktop.UPower.KbdBacklight' on object at path /org/freedesktop/UPower/KbdBacklight
_proxyInvoker@resource:///org/gnome/gjs/modules/overrides/Gio.js:98
_makeProxyMethod/<@resource:///org/gnome/gjs/modules/overrides/Gio.js:124
@dbusclient.js:36
JS_EvaluateScript() failed
Bien que l'ordinateur portable ait des lumières de clavier et que le clavier sans fil ait 3 réglages de lumière, UPOWER de Gnome ne peut pas les voir comme ces commandes Shell :
$ dbus-send --print-reply \
--system \
--dest=org.freedesktop.UPower \
/org/freedesktop/UPower \
org.freedesktop.UPower.EnumerateDevices
Retourner ceci :
method return time=1564075040.686545 sender=:1.49 -> destination=:1.145 serial=4392 reply_serial=2
array [
object path "/org/freedesktop/UPower/devices/line_power_ACAD"
object path "/org/freedesktop/UPower/devices/battery_BAT1"
object path "/org/freedesktop/UPower/devices/ups_hiddev2"
object path "/org/freedesktop/UPower/devices/mouse_0003o046Do101Ax0017"
object path "/org/freedesktop/UPower/devices/keyboard_0003o046Do2010x0018"
]
Ce pourrait être un script pratique à modifier pour surveiller le pourcentage de charge de la batterie d'un ordinateur portable.
(A suivre...)
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.