How to make the following GNOME extension quick setting `enable` run a given shell command?
```javascript export default class QuickSettingsExampleExtension extends Extension { enable() { this._indicator = new ExampleIndicator(); Main.panel.statusArea.quickSettings.addExternalIndicator(this._indicator); }
... } ```
Feb 10, 11:24pm
To make your GNOME Shell extension run a shell command when the enable() method is called, you need to use GNOME Shell's utilities to execute shell commands. The most common way is to use the Gio.Subprocess or GLib.spawn_command_line_async functions.
Here’s how you can modify your enable() method to run a shell command:
Using GLib.spawn_command_line_async
This is the simplest way to run a shell command asynchronously:
javascript
import GLib from 'gi://GLib';
export default class QuickSettingsExampleExtension extends Extension {
enable() {
// Run your shell command here
GLib.spawn_command_line_async('your-shell-command-here');
// Rest of your enable code
this._indicator = new ExampleIndicator();
Main.panel.statusArea.quickSettings.addExternalIndicator(this._indicator);
}
...
}
Example:
If you want to run notify-send "Hello, World!", you would do:
If you need more control (e.g., handling output, errors, or waiting for completion), use Gio.Subprocess:
javascript
import Gio from 'gi://Gio';
export default class QuickSettingsExampleExtension extends Extension {
enable() {
let proc = new Gio.Subprocess({
argv: ['/bin/sh', '-c', 'your-shell-command-here'],
flags: Gio.SubprocessFlags.NONE,
});
proc.init(null);
// Rest of your enable code
this._indicator = new ExampleIndicator();
Main.panel.statusArea.quickSettings.addExternalIndicator(this._indicator);
}
...
}
Example:
javascript
let proc = new Gio.Subprocess({
argv: ['/bin/sh', '-c', 'notify-send "Hello, World!"'],
flags: Gio.SubprocessFlags.NONE,
});
proc.init(null);
Notes:
Replace 'your-shell-command-here' with the actual command you want to run.
If your command requires root privileges, you may need to use pkexec or another privilege escalation method.
If you want to run the command synchronously (blocking), use GLib.spawn_command_line_sync instead, but be aware that this can freeze the UI if the command takes too long.
Debugging
Check the output of journalctl /usr/bin/gnome-shell for errors if the command doesn’t run as expected.
Make sure the command is in your $PATH or use the full path to the binary.
Would you like help with a specific command or debugging an issue?
Feb 10, 11:24pm
This is a shared conversation and may include unverified content that doesn't reflect Mistral AI's views. Login to resume chatting.