The package desktop-environment provides commands and a global minor mode to control your GNU/Linux desktop from Emacs.
With desktop-environment, you can control the brightness and volume as well as take screenshots and lock your screen. The package depends on the availability of shell commands to do the hard work for us. These commands can be changed by customizing the appropriate variables.
The global minor mode desktop-environment-mode
binds standard keys
to provided commands: e.g., <XF86AudioRaiseVolume>
to raise the
volume, <print>
to take a screenshot, and <s-l>
to lock the
screen.
Add the following to your initialization file:
(add-to-list 'load-path "~/.emacs.d/lib/desktop-environment/")
(require 'desktop-environment)
If you want all commands to be bound to keys, add this line after the ones above:
(desktop-environment-mode)
The following table summarizes the available commands and their
keybinding if desktop-environment-mode
is enabled:
Command | Key binding |
---|---|
desktop-environment-brightness-increment | <XF86MonBrightnessUp> |
desktop-environment-brightness-decrement | <XF86MonBrightnessDown> |
desktop-environment-brightness-increment-slowly | S-<XF86MonBrightnessUp> |
desktop-environment-brightness-decrement-slowly | S-<XF86MonBrightnessDown> |
desktop-environment-volume-increment | <XF86AudioRaiseVolume> |
desktop-environment-volume-decrement | <XF86AudioLowerVolume> |
desktop-environment-volume-increment-slowly | S-<XF86AudioRaiseVolume> |
desktop-environment-volume-decrement-slowly | S-<XF86AudioLowerVolume> |
desktop-environment-toggle-mute | <XF86AudioMute> |
desktop-environment-toggle-microphone-mute | <XF86AudioMicMute> |
desktop-environment-screenshot-part | S-<print> |
desktop-environment-screenshot | <print> |
desktop-environment-lock-screen | s-l or <XF86ScreenSaver> |
desktop-environment-toggle-wifi | <XF86WLAN> |
desktop-environment-toggle-bluetooth | <XF86Bluetooth> |
desktop-environment-toggle-music | <XF86AudioPlay> |
desktop-environment-music-previous | <XF86AudioPrev> |
desktop-environment-music-next | <XF86AudioNext> |
desktop-environment-music-stop | <XF86AudioStop> |
To use all commands desktop-environment provides without customizing the package, the following system packages must be available on your system:
- Volume: amixer
- Brightness: brightnessctl
- Screenshot: scrot
- Screenlock: slock
- Keyboard backlight: upower
- Wifi and bluetooth: TLP
- Music: playerctl
The table below summarizes the available options. You can use M-x
customize-group RET desktop-environment RET
to change them.
Option | Description |
---|---|
desktop-environment-keyboard-backlight-normal-increment | Normal keyboard increment value |
desktop-environment-keyboard-backlight-normal-decrement | Normal keyboard decrement value |
desktop-environment-brightness-normal-increment | Normal brightness increment value |
desktop-environment-brightness-normal-decrement | Normal brightness decrement value |
desktop-environment-brightness-small-increment | Small brightness increment value |
desktop-environment-brightness-small-decrement | Small brightness decrement value |
desktop-environment-brightness-get-command | Shell command getting current screen brightness level |
desktop-environment-brightness-get-regexp | Regular expression matching brightness value |
desktop-environment-brightness-set-command | Shell command setting the brightness level |
desktop-environment-volume-normal-increment | Normal volume increment value |
desktop-environment-volume-normal-decrement | Normal volume decrement value |
desktop-environment-volume-small-increment | Small volume increment value |
desktop-environment-volume-small-decrement | Small volume decrement value |
desktop-environment-volume-get-command | Shell command getting current volume level |
desktop-environment-volume-get-regexp | Regular expression matching volume value |
desktop-environment-volume-set-command | Shell command setting the volume level |
desktop-environment-volume-toggle-command | Shell command toggling between muted and unmuted |
desktop-environment-volume-toggle-microphone-command | Shell command toggling microphone between muted and unmuted |
desktop-environment-screenshot-command | Shell command taking a screenshot in the current working directory |
desktop-environment-screenshot-partial-command | Shell command taking a partial screenshot in the current working directory |
desktop-environment-screenshot-directory | Directory where to save screenshots |
desktop-environment-screenshot-delay-argument | Shell argument to append to the screenshot command to delay the screenshot |
desktop-environment-screenlock-command | Shell command locking the screen |
desktop-environment-wifi-command | Shell command toggling wifi |
desktop-environment-bluetooth-command | Shell command toggling bluetooth |
desktop-environment-music-toggle-command | Shell command toggling the music player |
desktop-environment-music-previous-command | Shell command for going to previous song |
desktop-environment-music-next-command | Shell command for going to next song |
desktop-environment-music-stop-command | Shell command for stopping the music player |
You might prefer to use light instead of brightnessctl. This can be done by adding the following to your configuration file:
(setq desktop-environment-brightness-get-command "light")
(setq desktop-environment-brightness-set-command "light %s")
(setq desktop-environment-brightness-get-regexp "^\\([0-9]+\\)")
(setq desktop-environment-brightness-normal-increment "-A 10")
(setq desktop-environment-brightness-normal-decrement "-U 10")
(setq desktop-environment-brightness-small-increment "-A 5")
(setq desktop-environment-brightness-small-decrement "-U 5")
The customizable variable desktop-environment-update-exwm-global-keys
can be
used to control how key bindings should be handled when EXWM is loaded.
If set to :global
(the default), the key bindings will be set via
`exwm-input-set-key`. This ensures that these are global bindings which work
regardless of char-mode or line-mode.
When predominantly working with line mode, however, it may make sense to set it
to the value :prefix
instead. This way, EXWM knows to forward the bindings to
the minor mode map in line mode. This way, when disabling
desktop-environment-mode
, the bindings are deactivated again.
Set to nil
to disable any kind of special behavior in the presence of EXWM.
See COPYING. Copyright (c) 2018-2023 Damien Cassou.