<h1 id="getting-an-installer">Getting an installer</h1>
<p><a href="https://www.freebsd.org/where/">Link to FreeBSD downloads</a></p>
<p>Choose the correct arch for your system. amd64 is probably the one you want if you know nothing about computer architectures.</p>
<p>you will have a lot of options:</p>
<ul>
<li>*-bootonly.iso is a netinstall image that is for burning to a CD</li>
<li>*-disc1.iso is a supplementary CD image for *-bootonly.iso</li>
<li>*-dvd1.iso is a complete DVD image with extra packages</li>
<li>*-memstick.img is a complete image for burning to a USB stick</li>
<li>*-mini-memstick.img is a netinstall image for burning to a USB stick</li>
</ul>
<p>I typically download and use one of the compressed memstick images. The mini image is fine but you probably want the regular memstick image if this is the first time you've ever installed FreeBSD. It alleviates some of the stress that comes with installing wireless drivers.</p>
<p>To burn a memstick image, use the <code>disk destroyer</code> program:</p>
<pre class="sh"><code>root@fbsd# xunz FreeBSD-13.1-RELEASE-amd64-memestick.img.xz
root@fbsd# sudo dd if=./FreeBSD-13.1-RELEASE-amd64-memestick.img of=/dev/sdx status=progress
root@fbsd# sudo eject /dev/sdx
</code></pre>
<hr />
<h1 id="initial-installation">Initial installation</h1>
<h2 id="pre-installation">pre-installation</h2>
<p>The standard steps for installing Linux apply:</p>
<ol>
<li>disable secure boot</li>
<li>enable USB booting</li>
<li>select boot device at startup time</li>
</ol>
<p>Because this is hardware specific, it's a homework assignment for the audience.</p>
<h2 id="installation">Installation</h2>
<p>FreeBSD has a menu driven installer that walks the user through various steps:</p>
<h3 id="1-set-keymap-leave-default-if-you-dont-know">1. set keymap (leave default if you don't know)</h3>
<h3 id="2-set-hostname">2. set hostname</h3>
<h3 id="3-select-sets">3. select sets</h3>
<p>There are many sets to choose from. New users probably want to install all of them. I typically only install the <code>lib32</code> set and add the rest later.</p>
<h3 id="4-partitioning">4. Partitioning</h3>
<p><code>bsdinstall</code> makes it easy to partition your drives. The <code>Auto(ZFS)</code> option is probably what you want as the default UFS configuration is unjournaled.</p>
<p>In the <code>Auto(ZFS)</code> menu, for a single hard drive installation, you want to stripe one disk. Select your hard drive.</p>
<p>If you want full disk encryption, select the <code>Encrypt Disks</code> option.</p>
<p>You also want to bump up the swap size to <code>ram*1.5</code> as a general rule (so, for 4g of ram you will set 6g of swap, for 8g or ram you set 12g swap). If you selected <code>Encrypt Disks</code>, you should also select <code>Encrypt Swap</code></p>
<p>When you are done, proceed with the installation. You will gt a confirmation message asking if you want to destroy the disk(s) you selected. This is your last chance to go back.</p>
<p>If you selected <code>Encrypt Disks</code>, you will be presented with a password prompt. This is the disk encryption password, not any user password.</p>
<h3 id="5-wait-for-sets-to-install">5. Wait for sets to install</h3>
<h3 id="6-configure-root-user">6. Configure root user</h3>
<p>After the sets are installed, you will set a root password.</p>
<h3 id="7-network-config">7. Network Config</h3>
<p>If your wireless card is supported, all the hard parts are already done for you. If your wireless card is not supported, you might need to plug in an ethernet cable and compile the drivers into the kernel.</p>
<p>Select your card (<code>em*</code> is ethernet, wifi cards are named after their drivers)</p>
<p>If you choose wifi, the installer will scan for networks and give you a menu to select one. If the network is encrypted, you will be presented with a password prompt.</p>
<h3 id="8-time-and-date-setup">8. Time and date setup</h3>
<h3 id="9-service-setup">9. Service setup</h3>
<p>You will be presented with a menu that enables/disables services on system startup. You probably want all of them except <code>local_unbound</code>.</p>
<h3 id="10-security-config">10. Security config</h3>
<p>The next menu enables/disables security features. If nothing else, select <code>disable_sendmail</code> and <code>clear_tmp</code></p>
<h3 id="11-add-users">11. Add users</h3>
<p>Simply add your user. You might want to add him to the wheel group if you plan on using sudo. I set my shell to tcsh but you can always change this later. A</p>
<h3 id="12-final-configuration">12. Final configuration</h3>
<p>You may want to install the handbook or modify any configurations you've made so far. This will take some time. When you are done, apply the config and exit.</p>
<h3 id="13-manual-config">13. Manual config</h3>
<p>Before you reboot the system and exit the installer, you are given a last opportunity to make any manual configurations. This is rarely needed for the average desktop user.</p>
<h2 id="post-installation">Post installation</h2>
<blockquote>
<p>What, no GUI?</p>
</blockquote>
<h3 id="update-system">Update system</h3>
<p>Login as root and update the system:</p>
<pre class="sh"><code>root@fbsd# freebsd-update fetch
root@fbsd# freebsd-update install
root@fbsd# reboot
</code></pre>
<h3 id="installing-packages">Installing packages</h3>
<p>Before we begin modifying the system, we need a better editor.</p>
<p>The <code>pkg</code> utility is used in a nearly identical way to any Linux package manager. The syntax <code>pkg $verb $object</code> persists. Verbs include <code>install</code>, <code>remove</code>, <code>update</code>, <code>upgrade</code>, <code>search</code>, etc.</p>
<p>Because the only editors installed by default are <code>vi</code>, <code>ed</code>, and <code>ee</code>, let's install vim.</p>
<p>There are multiple vim flavors, I like vim-tiny.</p>
<pre class="sh"><code>root@fbsd# pkg bootstrap
root@fbsd# pkg update
root@fbsd# pkg search vim
root@fbsd# pkg install vim-tiny
</code></pre>
<p>We probably want sudo (or doas) also:</p>
<pre class="sh"><code>root@fbsd# pkg install sudo
root@fbsd# visudo
</code></pre>
<p>Find the line that says:</p>
<pre class="sh"><code># %wheel ALL=(ALL:ALL) ALL
</code></pre>
<p>and move the <code># </code> from the beginning of the line to enable the wheel group to do actions as root.</p>
<h3 id="bootloader-tweaks">Bootloader tweaks</h3>
<p>We can tweak the bootloader to make the system more desktop-like. Edit <code>/boot/loader.conf</code></p>
<pre class="sh"><code># /boot/loader.conf
# -----------------
[ lots of default stuff ]

# custom stuff

# boot faster
autoboot_delay=2
</code></pre>
<p>Refer to <code>loader.conf(5)</code> for more tweaks and <code>/boot/defaults/loader.conf</code> for examples.</p>
<h3 id="init-tweaks">init tweaks</h3>
<p>We can tweak the init system also. Edit <code>/etc/rc.conf</code></p>
<pre class="sh"><code># /etc/rc.conf
# -----------------
[ lots of default stuff ]

# enable graphics
kld_list=&quot;i915kms&quot;

# faster booting
background_dhclient=&quot;YES&quot;
</code></pre>
<p>See <code>rc.conf(5)</code> and <code>/etc/defaults/rc.conf</code> for more information on what you can do.</p>
<h3 id="snapshotting-a-sane-fresh-installation">Snapshotting a sane fresh installation</h3>
<p>At this point, it is wise to take a recursive snapshot of your FreeBSD installation. This provides us with an easy way to roll back to a fresh, known working system configuration.</p>
<pre class="sh"><code>root@fbsd# zfs snapshot -r zroot@freshinstall
root@fbsd# zfs list - tsnapshot
</code></pre>
<p>If the system becomes unrepairable, we can simply rollback instead of reinstalling with a simple command:</p>
<pre class="sh"><code>root@fbsd# zfs rollback -r zroot@freshinstall
</code></pre>
<p>To rollback every dataset, we can use xargs:</p>
<pre class="sh"><code>root@fbsd# zfs list -t snapshot | grep freshinstall | cut -d &#39; &#39; -f 1 | xargs -I % zfs rollback %
</code></pre>
<p>Using zfs snapshots before and after making any potentially dangerous configuration changes saves a lot of headache in the long run because zfs is accessible from the recovery shell. Rollback with caution, user data may be lost.</p>
<p>Homework assignment: write a series of cron jobs that automatically takes snapshots (and cleans up the old ones) of user data as a form of <em>last line of defense version control</em></p>
<hr />
<h1 id="graphical-user-interfaces">Graphical user interfaces</h1>
<h2 id="install-graphics-drivers">Install graphics drivers</h2>
<p>This varies depending on your GPU.</p>
<pre class="sh"><code>root@fbsd# pkg install drm-kmod
</code></pre>
<p>After installing this package, you will see a message on how to enable the driver for your specific hardware:</p>
<pre class="sh"><code>For amdgpu: kld_list=&quot;amdgpu&quot;
For Intel: kld_list=&quot;i915kms&quot;
For radeonkms: kld_list=&quot;radeonkms&quot;
</code></pre>
<p>To enable one of these, you will need to add a line to your <code>/etc/rc.conf</code>. The earlier you place this line in the file, the sooner the kmods will load. For intel graphics, for example, you will add the following line:</p>
<pre class="sh"><code># /etc/rc.conf
# -----------------
[ lots of other stuff ]

# intel graphics drivers
kld_list=&quot;i915kms&quot;
</code></pre>
<p>To load the kmod on the fly (for larger resolution vt), run:</p>
<pre class="sh"><code>root@fbsd# kldload i915kms
</code></pre>
<p>You will also need to add your non-root user to the <code>video</code> group.</p>
<pre class="sh"><code>root@fbsd# pw groupmod video -m $user
</code></pre>
<h2 id="audio">Audio</h2>
<p>(hopefully) audio will just work. Supported audio interfaces are enumerated in <code>man snd(4)</code> and details on enabling/disabling drivers in <code>/boot/lodaer.conf</code> are also explained.</p>
<p>To manage volume, use the <code>mixer</code> command. For example, setting the mic volume to 50% and the speaker volume to 95%:</p>
<pre class="sh"><code>user@fbsd% mixer mic 50:50
user@fbsd% mixer vol 95:95
</code></pre>
<p>The <code>mixertui</code> command can also be used. This program functions similarly to <code>alsamixer</code> on Linux.</p>
<p>Depending on your hardware, the volume keys on your keyboard might not work. Adding a keybinding to a shell script is the usual solution and should be familiar to anyone who uses a desktop free window manager.</p>
<h2 id="getting-xorg">Getting xorg</h2>
<pre class="sh"><code>root@fbsd# pkg install xorg
</code></pre>
<p>The <code>twm</code> window manager is included with xorg by default. We can use it for testing our xorg configuration, mouse support, etc before continuing with larger desktop environments. Early troubleshooting always prevents foot shooting. Test early, test often.</p>
<pre class="sh"><code>root@fbsd# startx
</code></pre>
<h2 id="desktop-environments">Desktop Environments</h2>
<p>Refer to <a href="https://docs.freebsd.org/en/books/handbook/x11/#x11-wm">The handbook's instructions on desktops</a> for instructions on non-suckless (ie suck<em>more</em> setups). I have tested some of them on FreeBSD. KDE and Xfce are reliable. GNOME is mostly reliable. If you are running a big DE, you might have to modify polkit rules to do things like reboot the system from the GUI. Many larger desktops rely on FreeDesktop.org components. I personally do not like dbus so instead I use the suckless tools.</p>
<p>But, for the sake of completeness, I will install a few for the masses. I installed each one of these independently and sequentially on the same system using zfs snapshots to roll back to a bare bones system without any DE installed.</p>
<h3 id="gnome">GNOME</h3>
<pre class="sh"><code>root@fbsd# pkg install gnome
root@fbsd# printf &#39;proc\t/proc\tprocfs\trw\t0\t0\n&#39; &gt;&gt; /etc/fstab
root@fbsd# sysrc dbus_enable=&quot;YES&quot;
root@fbsd# sysrc gdm_enable=&quot;YES&quot;
root@fbsd# sysrc gnome_enable=&quot;YES&quot;
root@fbsd# reboot
</code></pre>
<p><a href="eps/hpr3705/gnome-on-freebsd.png"><img src="eps/hpr3705/gnome-on-freebsd_thumbnail.png" alt="Gnome screenshot on FreeBSD" /></a></p>
<h3 id="kde">KDE</h3>
<pre class="sh"><code>root@fbsd# pkg install kde5 sddm
root@fbsd# printf &#39;proc\t/proc\tprocfs\trw\t0\t0\n&#39; &gt;&gt; /etc/fstab
root@fbsd# sysrc dbus_enable=&quot;YES&quot;
root@fbsd# sysrc sddm_enable=&quot;YES&quot;
root@fbsd# reboot
</code></pre>
<p><a href="eps/hpr3705/kde-on-freebsd.png"><img src="eps/hpr3705/kde-on-freebsd_thumbnail.png" alt="KDE screenshot on FreeBSD" /></a></p>
<h3 id="xfce">Xfce</h3>
<pre class="sh"><code>root@fbsd# pkg install xfce xfce4-goodies
root@fbsd# sysrc dbus_enable=&quot;YES&quot;
</code></pre>
<p>Xfce does not provide it's own login manager, unlike GNOME or KDE. Let's pick lightdm because it's small and the graphical toolkit matches Xfce.</p>
<pre class="sh"><code>root@fbsd# pkg install lightdm-gtk-greeter
root@fbsd# sysrc lightdm_enable=&quot;YES&quot;
root@fbsd# reboot

</code></pre>
<p><a href="eps/hpr3705/xfce-on-freebsd.png"><img src="eps/hpr3705/xfce-on-freebsd_thumbnail.png" alt="Xfce screenshot on FreeBSD" /></a></p>
<h3 id="suckless">Suckless</h3>
<p><a href="https://suckless.org">suckless: tools that suck less.</a></p>
<p>This is how I use FreeBSD (and how I use most computers). I wrote a makefile that modifies the compile options so that the tools will build on FreeBSD and (optionally) adds the theme I use. <a href="https://gitlab.com/binrc/suckless">You can find my suckless duct tape in this git repo</a>.</p>
<p>I also use xdm because it's small and fast.</p>
<pre class="sh"><code>user@fbsd% sudo pkg install xdm
user@fbsd% sudo service xdm enable
</code></pre>
<p><a href="eps/hpr3705/suckless-on-freebsd.png"><img src="eps/hpr3705/suckless-on-freebsd_thumbnail.png" alt="Suckless screenshot on FreeBSD" /></a></p>
<h3 id="a-final-note-on-desktops">A final note on desktops</h3>
<p>Sometimes desktops behave unexpectedly on FreeBSD (ie users cannot manage power settings, reboot the system, etc). Make sure your login user is in the wheel group (it's your computer, you probably are already in the wheel group) and most of the issues will be resolved. For users you don't want in the wheel group, you'll need to write a few <code>polkit</code> rules.</p>
<p>Additionally, big desktops are typically compiled without the graphical components for modifying network connections.</p>
<p>Similar to Arch or Gentoo, there is a bit of legwork left to the end user. You'll never know what you might learn about systems administration if you don't wilfully give yourself the opportunity.</p>
<h2 id="shell-tweaks">Shell tweaks</h2>
<p>I like colors in the shell for systems I use regularly. I also like aliases. We can modify our csh configuration file to automatically do the fancy for us.</p>
<pre class="sh"><code># ~/.cshrc
# -----------------
[ lots of stuff ]

# prompt section
if ($?prompt) then
    # An interactive shell -- set some stuff up
    #set prompt = &quot;%N@%m:%~ %# &quot;
    #set prompt = &quot;%{\033[31m%}%N@%m:%~ %#%{\033[0m%} &quot;
    set prompt = &quot;%{\033[1m%}%N@%m:%~ %#%{\033[0m%} &quot;
    set promptchars = &quot;%#&quot;

    set filec
    set history = 1000
    set savehist = (1000 merge)
    set autolist = ambiguous
    # Use history to aid expansion
    set autoexpand
    set autorehash
    set mail = (/var/mail/$USER)

    if ( $?tcsh ) then
        bindkey &quot;^W&quot; backward-delete-word
        bindkey -k up history-search-backward
        bindkey -k down history-search-forwarrd
        bindkey &quot;^R&quot; i-search-back
    endif
endif

# alias section
alias la    ls -aF
alias lf    ls -FA
alias ll    ls -lAF
alias ls    ls -GF
alias lc    ls -GF
</code></pre>
<h2 id="some-other-packages">Some other packages</h2>
<p>The things I like:</p>
<pre class="sh"><code>user@fbsd% sudo pkg install firefox gimp feh mpv ffmpeg ImageMagick7 mutt newsboat
</code></pre>
<p>If you install a large DE, most of the applications are pulled in as well. If not, you can always use xargs to pull in hundreds of gigabytes of programs:</p>
<pre class="sh"><code>user@fbsd% sudo pkg search $desktop | cut -d &#39; &#39; -f 1 | xargs sudo pkg install -y
</code></pre>
<p>Going GNU:</p>
<pre class="sh"><code>user@fbsd% sudo pkg install coreutils emacs bash gcc gmake
</code></pre>
<p>Do a few package searches. What you want is probably there. If not, time to start porting :)</p>
<p>Once you have everything configured how you want it, it's a good time to take another zfs snapshot.</p>
<hr />
<h1 id="quickstart">Quickstart</h1>
<h2 id="init-system">Init system</h2>
<p>Instead of systemd, FreeBSD uses rc scripts for starting and stopping services. Everything is pretty much shell scripts. To modify the startup process, you simply edit <code>/etc/rc.conf</code> in a text editor.</p>
<p>For <code>systemctl</code> like starting/stopping/enabling, you can do the following:</p>
<pre class="sh"><code>root@fbsd# service sshd enable
root@fbsd# service sshd start
root@fbsd# service sshd restart
root@fbsd# service sshd stop
root@fbsd# service sshd disable
root@fbsd# service sshd onestart
root@fbsd# service sshd status
</code></pre>
<p>Each service has it's own init file so sometimes a specific service might take different arguments than the standard ones you might expect.</p>
<h2 id="networking">Networking</h2>
<p>Network interfaces are configured classically using <code>ifconfig(8)</code>. If you want a network interface to persist across reboots, you add the information in <code>/etc/rc.conf</code>.</p>
<p>WiFi is managed with <code>wpa_supplicant</code>. Refer to <code>man wpa_supplicant.conf(8)</code> for more information.</p>
<h2 id="firewall">Firewall</h2>
<p><a href="https://docs.freebsd.org/en/books/handbook/firewalls/#firewalls-pf">use the pf firewall, I like it</a></p>
<h2 id="general-upgrade-process">General upgrade process</h2>
<pre class="sh"><code>root@fbsd# pkg update &amp;&amp; pkg upgrade
root@fbsd# freebsd-update upgrade -r 13.1-RELEASE
root@fbsd# freebsd-update install
root@fbsd# reboot
root@fbsd# freebsd-update install
root@fbsd# pkg update &amp;&amp; pkg upgrade
root@fbsd# freebsd-update install
root@fbsd# reboot
</code></pre>
<h2 id="shells">Shells</h2>
<p>FreeBSD uses <code>tcsh(1)</code> as the default shell and includes <code>sh(1)</code> for bourne-like compatibility. You can install bash if you want.</p>
<h2 id="package-management">Package management</h2>
<p>There are two primary ways of managing software: binary packages and ports. Don't mix them if you don't know what you're doing, it can cause problems.</p>
<p>To be brief: ports are like Gentoo. You spend a lot of time watching compiler output. The following programs help: <code>synth</code>, <code>portmaster</code>, <code>poudriere</code>.</p>
<p>to be verbose: here is a quick guide on using the binary package management system:</p>
<pre class="sh"><code>pkg update
pkg upgrade
pkg search foobar
pkg install foobar
pkg remove foobar
pkg autoremove
</code></pre>
<p>As you can see, the syntax is nearly identical to dnf or apt.</p>
<h2 id="filesystem">Filesystem</h2>
<p>The hierarchy of FreeBSD is slightly different than a typical Linux system. Refer to <code>man hier(7)</code> for more information.</p>
<p>The biggest difference is that FreeBSD a logically organized system. For example: On Linux, everything seems to end up in <code>/bin</code> (which is a symlink to <code>/usr/bin</code>). Additionally, <code>/sbin</code> is just a symlink to <code>/usr/sbin</code>. On FreeBSD, the system is more organized. For example:</p>
<p><code>/bin</code> contains everything required to boot the system and <code>/sbin</code> contains everything required for fundamental administration.</p>
<p><code>/usr/bin</code> contains most everything else</p>
<p><code>/usr/local</code> contains everything installed by the package management system.</p>
<p>User installed programs are configured in <code>/usr/local/etc</code>. This might be confusing at first but you'll get the hang of it.</p>
<p>This logical separation might cause confusion when compiling software from source on FreeBSD but it's not too difficult to solve if you already know how about linker options and makefile modification.</p>
<p>As for filesystems, apparently ext2, ext3, and ext4 have read/write support using the <code>ext2fs(5)</code> driver. I probably wouldn't boot from them but this exists. UFS is not journaled by default, proceed with caution. ZFS is very good.</p>
<h2 id="zfs-non-starter">ZFS non-starter</h2>
<p>ZFS is cool because we can create partitions on a whim. Here is some shell output demonstrating listing datasets, creating datasets with a quota, destroying datasets, creating and using encrypted datasets, etc.</p>
<pre class="sh"><code>root@freebsd:/ #
root@freebsd:/ # zfs list
NAME                                        USED  AVAIL     REFER  MOUNTPOINT
zroot                                      3.97G   434G       96K  /zroot
zroot/ROOT                                 3.82G   434G       96K  none
zroot/ROOT/13.1-RELEASE_2022-09-18_143644     8K   434G     1.07G  /
zroot/ROOT/default                         3.82G   434G     3.71G  /
zroot/tmp                                   208K   434G      112K  /tmp
zroot/usr                                   157M   434G       96K  /usr
zroot/usr/home                              157M   434G      157M  /usr/home
zroot/usr/ports                              96K   434G       96K  /usr/ports
zroot/usr/src                                96K   434G       96K  /usr/src
zroot/var                                  1.04M   434G       96K  /var
zroot/var/audit                              96K   434G       96K  /var/audit
zroot/var/crash                              96K   434G       96K  /var/crash
zroot/var/log                               424K   434G      300K  /var/log
zroot/var/mail                              192K   434G      128K  /var/mail
zroot/var/tmp                               160K   434G       96K  /var/tmp
root@freebsd:/ # zfs list -t snapshot
NAME                                                     USED  AVAIL     REFER  MOUNTPOINT
zroot@freshinstall                                        64K      -       96K  -
zroot/ROOT@freshinstall                                    0B      -       96K  -
zroot/ROOT/13.1-RELEASE_2022-09-18_143644@freshinstall     0B      -     1.07G  -
zroot/ROOT/default@2022-09-18-14:36:44-0                76.7M      -     1.07G  -
zroot/ROOT/default@freshinstall                         35.0M      -     1.21G  -
zroot/tmp@freshinstall                                    96K      -      112K  -
zroot/usr@freshinstall                                     0B      -       96K  -
zroot/usr/home@freshinstall                               96K      -      128K  -
zroot/usr/ports@freshinstall                               0B      -       96K  -
zroot/usr/src@freshinstall                                 0B      -       96K  -
zroot/var@freshinstall                                     0B      -       96K  -
zroot/var/audit@freshinstall                               0B      -       96K  -
zroot/var/crash@freshinstall                               0B      -       96K  -
zroot/var/log@freshinstall                               124K      -      188K  -
zroot/var/mail@freshinstall                               64K      -       96K  -
zroot/var/tmp@freshinstall                                64K      -       96K  -
root@freebsd:/ # zfs create zroot/crypt
root@freebsd:/ # zfs set quota=5g zroot/crypt
root@freebsd:/ # zfs list zroot/crypt
NAME                                        USED  AVAIL     REFER  MOUNTPOINT
zroot/crypt                                  96K  5.00G       96K  /zroot/crypt
root@freebsd:/ # zfs destroy zroot/crypt
root@freebsd:/ # zfs create -o encryption=on -o keylocation=prompt -o keyformat=passphrase zroot/crypt
Enter new passphrase:
Re-enter new passphrase:
root@freebsd:/ # zfs list zroot/crypt
NAME                                        USED  AVAIL     REFER  MOUNTPOINT
zroot/crypt                                 200K   434G      200K  /zroot/crypt
root@freebsd:/ # touch /zroot/crypt/supersecret
root@freebsd:/ # ls /zroot/crypt/
supersecret
root@freebsd:/ # zfs get encryption zroot/crypt
NAME         PROPERTY    VALUE        SOURCE
zroot/crypt  encryption  aes-256-gcm  -
root@freebsd:/ # zfs unmount zroot/crypt
root@freebsd:/ # zfs unload-key -r zroot/crypt
1 / 1 key(s) successfully unloaded
root@freebsd:/ # zfs mount zroot/crypt
cannot mount &#39;zroot/crypt&#39;: encryption key not loaded
root@freebsd:/ # zfs get keystats zroot/crypt
root@freebsd:/ # zfs get keystatus zroot/crypt
NAME         PROPERTY   VALUE        SOURCE
zroot/crypt  keystatus  unavailable  -
root@freebsd:/ # zfs load-key -r zroot/crypt
Enter passphrase for &#39;zroot/crypt&#39;:
zfs 1 / 1 key(s) successfully loaded
root@freebsd:/ # zfs mount -a
root@freebsd:/ # ls /zroot/crypt/
supersecret
</code></pre>
<hr />
<h1 id="a-conclusion">A conclusion</h1>
<p>Really, I think FreeBSD is a viable desktop operating system for the types of people who already use Linux in a terminal-centric capacity. After all, UNIX is UNIX.</p>
<hr />
<h1 id="other-stuff">Other stuff</h1>
<p><a href="https://wiki.freebsd.org/JailingGUIApplications">Running Firefox inside of a jail</a></p>
<p><a href="https://forums.freebsd.org/threads/how-to-execute-firefox-in-a-jail-using-iocage-and-ssh-jailme.53362/">Another way to run Firefox inside of a jail</a></p>
<h2 id="freebsd-distros-that-come-with-a-desktop-out-of-the-box">FreeBSD Distros that come with a desktop out of the box:</h2>
<p><a href="https://www.ghostbsd.org">GhostBSD - FreeBSD with MATE</a></p>
<p><a href="https://hellosystem.github.io">HelloSystem - FreeBSD with an Apple-like GUI (still in development)</a></p>
<p><a href="https://www.midnightbsd.org">MidnightBSD - FreeBSD with Xfce and a different package management system</a></p>
<p><a href="https://nomadbsd.org">NomadBSD - Live GUI FreeBSD with OpenBoX</a></p>
<hr />
<h4>Additional Links</h4>
<p> Linux to FreeBSD quick start: <br />
<a href="https://klarasystems.com/articles/easily-migrate-from-linux-to-freebsd/" target="_blank">https://klarasystems.com/articles/easily-migrate-from-linux-to-freebsd/</a><br />
<br />
Supported hardware: <br />
<a href="https://wiki.freebsd.org/Laptops" target="_blank">https://wiki.freebsd.org/Laptops</a><br />
<a href="https://bsd-hardware.info/" target="_blank">https://bsd-hardware.info/</a><br />
<a href="https://dmesgd.nycbug.org/index.cgi" target="_blank">https://dmesgd.nycbug.org/index.cgi</a></p>

<p><small><small>Editor's Note: This section was included from the comment sent by <a href="https://hackerpublicradio.org/correspondents/0406.html">binrc</a>.</small></small></p>
