URI: 
       HOW TO INVOKE ZZZ WITHOUT SUDO
       
       
       
       
       Notice
       ----------------------------------------------------------------------
       Update: <2023-09-11 Mon 21:38>
       
       The method originally outlined in this article ("Learning to sleep")
       for invoking `zzz' without `sudo' is flawed. Because the `/sys/'
       folder is regenerate each boot, the group and permission modifications
       not persist through a reboot cycle. This is a lesson learned for me,
       and another interesting detail about Linux uncovered.
       
       A better way of making `zzz' easier to invoke (still with sudo,
       inevitably) is by adding your user to the `wheel' group and modifying
       `/etc/sudoers' to allow `wheel' group members to execute commands
       without a password.
       
       ,----
       |    usermod -aG wheel roygbyte
       |    ed /etc/sudoers
       |    > 83
       |    > s/#//
       |    > wq
       |    # For those not using ed(1): remove # from line that reads
       |    # `#%wheel ALL=(ALL:ALL) NOPASSWD: ALL`
       `----
       
       You can test this by logging into a new shell or logging in/out of
       your X session.
       
       Adding an alias to `.bashrc' would make it possible to at least hide
       the use of `sudo', if that's still desired.
       
       ,----
       |   alias zzz='sudo zzz'
       `----
       
       Easier still is to add a key binding to `/.config/i3/config' to sleep
       the computer while while in `i3':
       
       ,----
       |   bindsym $mod+Shift+l exec sudo zzz
       `----
       
       
       Learning to sleep
       ----------------------------------------------------------------------
       As mentioned above, this method doesn't work. I'm keeping it up
       anyways.
       
       `zzz' is a clever program for putting your computer to sleep. It has a
       cute name, a nice man page with descriptions of various computer sleep
       states, and straight forward error reporting. It was available to me
       out-of-the-box on Void, although I didn't find out about it right
       away.
       
       Before I started using `zzz', I would put my computer to sleep by
       writing directly to `/sys/power/state'. For instance:
       
       ,----
       |   $ sudo echo -n disk > /sys/power/state
       `----
       
       Though arduous, learning this sequence of commands let me better
       understand how `/sys' files represent different parts of the computer,
       how writing to these files can cause certain things to happen, and how
       reading from these files can provide information about the system.
       
       Soon enough I needed a faster way to put my computer to sleep. I
       learned about `zzz' through a search or maybe the Void
       documentation. (I don't remember). I started using it right
       away. Immediately I got an error:
       
       ,----
       |   $ zzz
       |   zzz: sleep permission denied
       |   # Error explained in man page: "You lack sufficent privilege to write to /sys/power/state."
       `----
       
       I got around this by invoking `zzz' using `sudo'. But typing my
       password in each time I wanted my computer to snooze became
       irritating. I figured there must be a better way!
       
       I'd been reading a bit about SysV during this time. Something must
       have clicked because I realized I could probably change the ownership
       permissions of the file in such a way that my account would be able to
       invoke `zzz' without `sudo'.
       
       On a lark, I started fooling around to see how to do this. First, I
       `ll''d the file in question, revealing `root:root' ownership and
       `rw-r--r--' permissions. That would explain the requirement for
       `sudo'. Next I looked into `/etc/groups' to see if there were any
       system-y type groups I could use in lieu of `root' for the file. I
       didn't find any, so I decided I'd create one called `sys'. I'd use
       this group to extend permissions for files in `/sys/*', starting with
       `power/state' and including other files over time as need be. Then it
       was a simple matter of invoking `chmod', `chown', and `usermod' to put
       everything together. See the next section for a step-by-step how-to.
       
       
       How-to
       ----------------------------------------------------------------------
       Here's how I made `zzz' available to my user without having to invoke
       `sudo'.
       
       Frist, create a new group called `sys'. (You could use any group name,
       of course. `cis', `cyst', and `sis' are all great alternatives.)
       
       ,----
       |   $ groupadd sys
       `----
       
       Add your user account into the group.
       
       ,----
       |   $ usermod -aG sys roygbyte
       `----
       
       Change the group for `/sys/power/state'.
       
       ,----
       |   $ chown :sys /sys/power/state
       `----
       
       Adjust the permissions of `/sys/power/state', adding write permissions
       for the `sys' group.
       
       ,----
       |   $ chmod g+w /sys/power/state
       `----
       
       You should now have something like this:
       
       ,----
       |   -rw-rw-r-- 1 root sys 4096 Aug 30 08:30 /sys/power/state
       `----
       
       You can test it worked by logging into a new shell.
       
       ,----
       |   $ su roygbyte
       |   $ groups
       |   > roygbyte : roygbyte sys ...
       |   $ zzz
       `----
       
       For the new group to be available in all existing logged in shells you
       must exit and log back into your session.
       
       That's it.
       
       Happy computer dreaming!
       
       
       Adding hooks
       ......................................................................
       Hooks run as user
       zzz-user-hooks pxkg
       
       
       Colophon
       ----------------------------------------------------------------------
       I was inspired to write this post by Solene, whose gopher hole
       includes lots of little computer hints and tutorials. Indeed--no bit
       of computer how-do'er-y is too small to be worth writing about!
       
       Thanks to feranur, luca, ahesford, from libera#voidlinux for improving
       this teeny article with suggestions, grammar-checks, and alternative
       approaches.