You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
Damien Cassou c7507bfb10 Merge pull request 'Release 0.4.0' (#6) from 0.4.0 into master 2 years ago
.gitignore * .gitignore: add 4 years ago
.gitlab-ci.yml * .gitlab-ci.yml: Remove official support for Emacs 25.1 4 years ago
.travis.yml Add .travis.yml file 3 years ago
COPYING Initial version 5 years ago
Makefile Update makel to 0.6.0 3 years ago Add music player keybindings 2 years ago
desktop-environment.el Release 0.4.0 2 years ago


<p> <a href=""> <img alt="MELPA Stable" src=""/> </a>

<a href=""> <img alt="MELPA" src=""/> </a>

<a href=""> <img alt="pipeline status" src="" /> </a> </p>


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:



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
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>


Default configuration

To use all commands desktop-environment provides without customizing the package, the following system packages must be available on your system:

Configuring desktop-environment

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-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
Using light instead of brightnessctl

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")
EXWM Compatibility

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 Damien Cassou.

<a href=""> <img alt="Donate using Liberapay" src=""> </a>