uenv #### | *uenv* - as in `*u*seful *env*ironments` - is a collection of scripts, |systemd| |systemd.service| and |systemd.timer| units and configuration that go along with it. | It is meant to help organizing your workflow and hiding away user and system services in neat little separate environments. | Arguably a couple of the |systemd.unit| might only be useful, when using window managers like |awesome|, that stem from a minimalistic approach. | Some of the functionalities implemented here can be found in desktop environments like |kde| or |gnome|. | *uenv* and all of its components are licensed under the GPLv3. Separate tmux environments -------------------------- | |tmux| is a very useful tool to multiplex your terminals. It offers tiling and a high configurability. | Here it is used for a couple of services to start an environment in which other |cli| programs can run. | In those services the following |systemd.exec| is set: .. code:: systemd Environment=TMUX_TMPDIR=%t/tmux | This will store the |tmux| server socket in the users' *XDG_RUNTIME_DIR*. Therefore it will be necessary to set your *TMUX_TMPDIR* |environment_variable| for your |bash| or |zsh| (or whatever you run) to the following: .. code:: bash export TMUX_TMPDIR="$XDG_RUNTIME_DIR/tmux/" | Afterwards a simple .. code:: bash tmux -L attach | will attach you to that separate environment. | *Note*: All of these separate environments are dependant on your login. If there is no login, |systemd| will kill all of your user services! You can get around this by using |loginctl| to set *enable-linger* for your user. "REALTIME" kernel parameter ----------------------------------------- | Some services are dependant or anti-dependant on the |kernel_parameter| *"systemd.setenv=REALTIME=true"*. The option itself sets nothing but an Environment for systemd. | This is pretty useful when wanting to enable or disable certain services using *ConditionKernelCommandLine* in their *[Unit]* sections, when you're on a |real-time_kernel|. | Simply add this to your kernel parameters, using |grub|, |syslinux|, or |systemd-boot|: .. code:: bash systemd.setenv=REALTIME=true Services -------- compton --user ______________ | The |compton| user service needs a properly exported *$DISPLAY* variable to work. You can set this in your |systemd-user.conf|: .. code:: systemd DefaultEnvironment=DISPLAY=:0 | The compton user service is anti-dependent on the `REALTIME kernel parameter` (i.e. it will not start, when booting into a kernel with that option set). | You can start and enable it like any other systemd user service: .. code:: systemd systemctl --user start compton systemctl --user enable compton cpupower-rt ___________ | The cpupower package on |arch_linux| has some [limitations](https://bugs.archlinux.org/task/44270?project=5&cat[0]=33&string=cpupower), which make it quite hard to apply CPU settings based on profiles. | At least in a real-time environment, the modified version of cpupower - called cpupower-rt - makes it easy to apply differing settings **after** the usual cpupower settings have been applied. | jOnce the above mentioned feature request is resolved, it will be as easy as just copying the *cpupower.service* file and modify it slightly in */etc/systemd/sytem/*. | For now, there needs to be a separate config file *and* a separate script. For setting it up, just modify */etc/default/cpupower-rt* as you would for */etc/default/cpupower*. | The *cpupower-rt.service* is dependant on the `REALTIME kernel parameter`. It will only start, if that condition is met. | You can start and enable it like any other systemd service: .. code:: systemd systemctl start cpupower-rt systemctl enable cpupower-rt irssi --user ____________ | The systemd user service *irssi.service* starts the |irc| client |irssi| in a separate |tmux| environment for the current user. | To connect to it after starting the service, just do .. code:: systemd tmux -L irssi attach jack@ --user ____________ JACK2 comes with a dbus interface. Unfortunately systemd's efforts regarding [kdbus](https://en.wikipedia.org/wiki/Kdbus) and integrating kernel CPU [cgroups](https://www.kernel.org/doc/Documentation/cgroups/) (and thereby also real-time scheduling) is still somewhat in limbo. The included jack@.service starts JACK using */usr/bin/jackd"* (so no dbus), according to a profile. The name of that profile follows after the *@* on starting/ activating the unit and must be found in either `/etc/jack/` or `~/.config/jack/`. systemctl --user start jack@fw1 systemctl --user enable jack@fw1 This service is dependant on the real-time kernel command line option. It will only start, if that condition is met. monitoring --user _________________ | The systemd user service *monitoring.service* is just a useful tool for monitoring. | Currently it starts |htop|, |glances| and asks loginctl for the current user processes in a `separate |tmux| environment`. | To connect to it after starting the service, just do .. code:: systemd tmux -L mon attach mpd@ --user ___________ | The specialized systemd user service *mpd@.service* starts |mpd| with a separate configuration located in *~/.config/mpd/mpd-.conf*. It will also use |pax11publish| to connect pulseaudio to that server! | Start and enable it like any other systemd user service: .. code:: bash systemctl --user start mpd@myserver systemctl --user enable mpd@myserver mpd-new --user ______________ | The systemd user service *mpd-new.service* is a drop-in replacement for *mpd.service*. It properly starts |mpd| with a real-time budget and will remain in this repository as long as upstream decides to ship a |mpd_bug|. | You can use it instead of *mpd.service*, if you want to use real-time scheduling on newer systemd (>205) based systems. .. code:: bash systemctl --user start mpd-new systemctl --user enable mpd-new postpone-screensaver --user ___________________________ | With the systemd user service and timer *postpone-screensaver.{service,timer}* one can - as the name implies - postpone one's screensaver from blanking the screen. The script checks for programs set in *~/.config/postpone-screensaver* and can be started and activated like any other timer/service: .. code:: bash systemctl --user start postpone-screensaver.timer systemctl --user enable postpone-screensaver.timer rtorrent --user _______________ | rtorrent doesn't really come with any systemd service. Here it is started within a `separate |tmux| environment`. It will automatically create *~/Downloads/rtorrent/{tmp,session}*, if non-existent and set its working directory to *~/Downloads*. | The systemd user service is started/ enabled like this: .. code:: bash systemctl --user start rtorrent systemctl --user enable rtorrent rtorrent ________ | The systemd system service rtorrent.service is quite similar in functionality, but on top offers the possibility of dependency to a system service - like |openvpn| (the default being a profile called *secure*). | **Note:** In a separate configuration file (*"/etc/conf.d/rtorrent@.conf"*), the *TMUX_TMPDIR* should be set, as it otherwise defaults to using *"/tmp/"*! | The system service can be started and enabled like this: .. code:: bash systemctl start rtorrent@ systemctl enable rtorrent@ | To connect to the user and system service after starting the service, just do .. code:: bash tmux -L rt attach syndaemon _________ The |xf86-input-synaptics| package comes with */usr/bin/syndaemon*. This tool is used to disable the touchpad while typing. While desktop environments like |kde| and |gnome| use it integrated, it can also be started as a systemd user service: .. code:: bash systemctl --user start syndaemon systemctl --user enable syndaemon systemd-analyze-plot ____________________ | Systemd comes with a functionality to plot the system's boot up process in svg and other file formats. This user service uses */usr/bin/systemd-analyze* to plot a svg to a predefined directory. Configuration takes place in *~/.config/systemd/plot.conf*. | To start/enable the service afterwards just do: .. code:: bash systemctl --user start systemd-analyze-plot systemctl --user enable systemd-analyze-plot tmux --user ___________ | The systemd user service *tmux.service* starts a `separate |tmux| environment`. | To start/enable it, just do: .. code:: bash systemctl --user start tmux systemctl --user enable tmux | To connect to the user service after starting it, just do .. code:: bash tmux attach update-mirrorlist _________________ | |update-mirrorlist| is a script to update the system's |pacman| mirrorlist according to some predefined settings. Here it is started on a weekly basis according to a timer unit. | To start/enable it, just do: .. code:: bash systemctl start update-mirrorlist.timer systemctl enable update-mirrorlist.timer weechat --user ______________ | The systemd user service *weechat.service* starts the |irc| client |weechat| in a `separate |tmux| environment` for the current user. | To start/enable it, just do: .. code:: bash systemctl --user start weechat systemctl --user enable weechat | To connect to it after starting the service, just do .. code:: bash tmux -L weechat attach .. |systemd| raw:: html systemd .. |awesome| raw:: html awesome .. |gnome| raw:: html Gnome .. |kde| raw:: html KDE .. |systemd.unit| raw:: html units .. |systemd.service| raw:: html service .. |systemd.timer| raw:: html timer .. |systemd.exec| raw:: html Environment .. |tmux| raw:: html tmux .. |cli| raw:: html cli .. |environment_variable| raw:: html environment variable .. |bash| raw:: html bash .. |zsh| raw:: html zsh .. |systemd-user.conf| raw:: html /etc/systemd/user.conf .. |compton| raw:: html compton .. |real-time_kernel| raw:: html real-time kernel .. |kernel_parameter| raw:: html kernel parameter .. |grub| raw:: html GRUB .. |syslinux| raw:: html syslinux .. |systemd-boot| raw:: html systemd-boot .. |arch_linux| raw:: html Arch Linux .. |htop| raw:: html htop .. |irc| raw:: html IRC .. |irssi| raw:: html Irssi .. |glances| raw:: html glances .. |openvpn| raw:: html OpenVPN .. |mpd_bug| raw:: html broken version .. |mpd| raw:: html MPD .. |pax11publish| raw:: html pax11publish .. |xf86-input-synaptics| raw:: html xf86-input-synaptics .. |loginctl| raw:: html loginctl .. |update-mirrorlist| raw:: html update-mirrorlist .. |pacman| raw:: html pacman .. |weechat| raw:: html weechat