Title: OpenBSD: getting started
       Author: Solène
       Date: 03 May 2021
       Tags: openbsd
       Description: 
       
       # Introduction
       
       This is a guide to OpenBSD beginners, I hope this will turn to be an
       useful resource helping people to get acquainted to this operating
       system I love.  I will use a lot of links because I prefer to refer to
       official documentation.
       
       If you are new on OpenBSD, welcome aboard, this guide is for you.  If
       you are not new, well, you may learn a few things.
       
       # Installation step
       
       This article is not about installing OpenBSD.  There are enough
       official documentation for this.
       
 (HTM) OpenBSD FAQ about Installation
       
       # Booting the first time
       
       So, you installed OpenBSD, you chose to enable X (the graphical
       interface at boot) and now you face a terminal on a gray background. 
       Things are getting interesting here.
       
       ## Become super user (root)
       
       You will often have to use the root account for commands or modifying
       system files.
       
       ```get super user
       su -l
       ```
       
       You will have to type root user password (defined at install time) to
       change to that user.  If you type "whoami" you should see "root" as the
       output.
       
       ## You got a mail!
       
       When you install the system (or upgrade) you will receive an email on
       root user, you can read it using the "mail" command, it will be an
       email from Theo De Raadt (founder of OpenBSD) greeting you.
       
       You will notice this email contain hints and has basically the same
       purpose of my current article you are reading.  One important man page
       to read is afterboot(8).
       
 (HTM) afterboot(8) man page
       
       ## What is a man page?
       
       If you don't know what a man page is, it's really time to learn because
       you will need it.  When someone say a "man page" it implies "a manual
       page".  Documentation in OpenBSD is done in manual pages related to
       various software, concepts or C functions.
       
       To read a man page, in a terminal type "man afterboot" and use arrows
       or page up/down to navigate within the man page.  You can read "man
       man" page to read about man itself.
       
       Previously I wrote "afterboot(8)" but the real man page name is
       "afterboot", the "(8)" is meant to specify the man page section. Some
       words can be used in various contexts, that's where man pages sections
       come into the place. For instance, there are sysctl(2) documenting the
       system call "sysctl()" while sysctl(8) will give you information about
       the sysctl command to change kernel settings.  You can specify which
       section you want to read by typing the number before the page name,
       like in "man 2 sysctl" or "man 8 sysctl".
       
       Man pages are constructed in the same order: NAME, SYNOPSIS,
       DESCRIPTION..... SEE ALSO..., the section "SEE ALSO" is an important
       one, it gives you man page references of other pages you may want to
       read.  For example, afterboot(8) will give you hints about doas(1),
       pkg_add(1), hier(7) and many other pages.
       
       Now, you should be able to use the manual pages.
       
       # Install a desktop environment
       
       When you want to install a desktop environment, there will often be a
       "meta package" which will pull every packages required for the
       environment to work.
       
       OpenBSD provides a few desktop environments like:
       - Gnome 3 => pkg_add gnome
       - Xfce => pkg_add xfce
       - MATE => pkg_add mate
       
       When you install a package using "pkg_add", you may find a message at
       the end of the pkg_add output telling you there is a file in
       /usr/local/share/doc/pkg-readmes/ to read, those files are specifics to
       packages and contains instructions that should be read before using a
       package.
       
       The instructions could be about performance, potential limits issues,
       configuration snippets, how to init the service etc...  They are very
       important to read, and for desktop environment, they will tell you
       everything you know to get it started.
       
       # Graphical session
       
       When you log-in from the xenodm screen (the one where you have a Puffer
       fish and OpenBSD logo asking login/password), the program xenodm will
       read your ~/.xsession file, this is where you prepare your desktop and
       the execute commands.  Usually, the first blocking command (that keeps
       running on foreground) is your window manager, you can put commands
       before to customize your system or run programs in background.
       
       ```file example of .xsession
       # disable bell
       xset b off
       
       # auto blank after 10 minutes
       xset s 600 600
       
       # run xclock and xload
       xclock -geometry 75x75-70-0 -padding 1 &
       xload -nolabel -update 5 -geometry 75x75-145-0 & 
       
       # load my ~/.profile file to define ENV
       . ~/.profile
       
       # display notifications
       dunst &
       
       # load changes in X settings
       xrdb -merge ~/.Xresources
       
       # turn the screen reddish to reduce blue color
       sct 5600
       
       # synchronize copy buffers
       autocutsel &
       
       # kdeconnect to control android phone
       kdeconnect-indicator &
       
       # reduce sound to not destroy my ears
       sndioctl -f snd/1 output.level=0.3 
       
       # compositor for faster windows drawing
       picom &
       
       # something for my mouse setup (I can't remember)
       xset mouse 1 1
       xinput set-prop 8 273 1.1
       
       # run my window manager
       fvwm2
       ```
       
       # Configure your shell
       
       This is a very recurrent question, how to get your shell aliases to be
       working once you have logged in?  In bash, sh and ksh (and maybe other
       shells), every time you spawn a new interactive shell (in which you can
       enter commands), the environment variable ENV will be read and if it
       has a value matching a file path, it will be loaded.
       
       The design to your beloved shell environment set is the following:
       
       - ~/.xsession will source ~/.profile when starting X, inheriting the
       content to everything run from X
       - ~/.profile will export ENV like in "export ENV=~/.myshellfile"
       
       # CPU frequency auto scaling
       
       If you run a regular computer (amd64 arch) you will want to run the
       service "apmd" in automatic mode, it will keep your CPU at lowest
       frequency and increase the frequency when you have some load, allowing
       to reduce heat, power usage and noise.
       
       Here are commands to run as root:
       
       ```commands
       rcctl enable apmd
       rcctl set apmd flags -A
       rcctl start apmd
       ```
       
       # What are -release and -stable?
       
       To make things simple, the "-release" version is the whole sets of
       files to install OpenBSD of that release when it's out.  Further
       updates for that release are called -stable branch, if you run "pkg_add
       -u" to update your packages and "syspatch" to update your base system
       you will automatically follow -stable (which is fine!).  Release is a
       single point in time of the state of OpenBSD.
       
       # Quick FAQ
       
       ## Where is steam?
       
       No steam, it's proprietary and can't run on OpenBSD
       
       ## Where is wine?
       
       No wine, it would require changes into the kernel.
       
       ## Does my recent NVIDIA card work?
       
       No nvidia driver, it would work but with a VESA driver, it will be
       sluggish and very slow.
       
       ## Does the linux emulation work?
       
       There is no linux emulation.
       
       ## I want my favorite program to run on OpenBSD
       
       If it's not opensource and not using a language like Java or C# that
       use a Language Virtual Machine allowing abstraction layer to work, it
       won't work (and most program are not like that).
       
       If it's opensource, it may be possible if all its dependencies are
       available on OpenBSD.
       
 (HTM) Get into the ports tree to make things run on OpenBSD
       
       ## Can I have sudo?
       
       OpenBSD ships a sudo alternative named "doas" in the base system but
       sudo can be installed from packages.
       
 (HTM) doas man page
 (HTM) doas.conf man page
       
       ## How to view the package list?
       
       You can check the package directory in a mirror or visit
       
 (HTM) Openports.pl (using the development version of the ports tree)
       
       ## What can the virtualization tool do?
       
       The virtualization system of OpenBSD can run OpenBSD or some linux
       distributions but without a graphical interface and with only 1 CPU. 
       This mean you will have to configure a serial console to proceed to the
       installation and then use ssh or the serial console to use your system.
       
       There is qemu in ports but it's not accelerated and won't suit most of
       people needs because it's terribly terribly slow.