A I Powered Raspberry Pi

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 100

WELCOME

MEET THE TEAM Smarter Pi Guy


The big news is that Linux gaming has
leapfrogged Mac OS on Steam for the We’re not fighting the tide of the
AI phenomenon – in fact, you
first time. Which classic game would might say we’re embracing it,
you love to play again on your Linux PC? though I can safely say the
clunky prose you’ll find littering
the magazine is entirely human-
generated. We’ve tried using
Matthew Holder chatbots to write Linux copy
Ah, that wonderful smell of nostalgia. One and it turned out even less
of the first games I got hooked on was intelligible than usual…
Pipe Mania on the Archimedes A5000. The For this issue, though, we’re
aim was to rotate pipes and make sure here to prove that you don’t
liquid could flow around the board. An need a server farm of high-end
honourable mention goes to the E-Type driving game, too. $10,000 Nvidia A100 Tensor kit to use machine learning.
We’ve got projects powered by nothing more than a humble
Raspberry Pi. From voice recognition to the classic chatty bots,
Les Pounder the Raspberry Pi is (just) powerful enough to run optimised
Blackpool in the ’80s was wall-to-wall versions of large language models at home.
arcades and I loved it. My mother The ramifications are that anyone can get started with
worked at the Pleasure Beach, which machine-learning projects, experimenting with nothing more
afforded me early access. The sit-down than a low-cost Pi, open source software and an internet
Star Wars cabinet is where I cut my teeth connection. They can then deploy their solutions quickly and
blasting vector spaceships and defeating the evil Empire. easily on what is now a standard embedded industrial device.
The fact that the Raspberry Pi Foundation is helping advise
on education policy in the UK (and around the globe) should
Mayank Sharma hopefully put young coders in a strong position for the future.
I got my start on 8-bit side scrollers and In the meantime, we can have fun getting a Pi to recognise
shoot-’em-ups, before maturing to strategy who’s at the front door. What’s not to enjoy?
games in the ’90s. And that’s where I still
am. Thankfully, retro gaming is an open
source speciality and between the RPi and
my Linux box, I can easily escape to my happy place.

Neil Mohr Editor


Nick Peers neil.mohr@futurenet.com
Thanks to the brilliant Batocera.linux
(https://batocera.org) retro-gaming OS, I
have all my old favourite games from the
’80s and ’90s at my fingertips. You can run
it alongside your existing distro or boot
from a USB stick every time the retro-gaming urge bites.

Subscribe
& save!
Michael Reed
I’m happy to hear the Linux percentages on
Steam are up, no doubt thanks to the Steam
Deck. It’s reached the stage where I assume On digital and print:
that most games will work, but I do a quick
check on ProtonDB to be safe. Frostpunk,
see page 16
Fallout 76 and No Man’s Sky are among my current installs.

www.techradar.com/pro/linux October 2023 LXF307 3


SUBSCRIBE NOW!
Page 16

A.I.-POWERED
REVIEWS

WD Black 8TB HDD 19


It turns out that Shane Downing would

RASPBERRY Pi
like more performance from his
performance products.

Tam Hanna has followed


the Raspberry Pi
since its first
revision, and
now puts the
AMD Radeon RX 7600 20
With so much RPi 4 to work
competition in the on amusing
market, Chris Szewczyk
tries to work out whether AI tasks.
the new Radon RX 7600 See page 34!
does enough to
beat the pack.

Window Maker Live 22


Nate Drake gets into the frame of things
with Window Maker – a desktop
experience reminiscent of a ’90s Mac.

OPNSense 23.7 23

CREDIT: Magictorch
Nate Drake has the good sense to try out
OPNSense, a top-notch firewall distro
based on FreeBSD.

ROUNDUP IN DEPTH

Rhino Linux 2023.1 24


Nate Drake takes a ride on the Rhino – the
Ubuntu-based developer build – exploring
CREDIT: Getty Images, Murena

the Unicorn desktop, as well as the


pleasures and perils of rolling releases.

Mask of the Rose 26 Personal cloud servers 28 Fre/e/ your phone 48


There’s an indescribable horror in the Michael Reed compares five open source Tired of being tracked and spied upon
basement. Management just employed it cloud servers to find out whether they’re by popular mobile OSes, Jonni Bidwell
to do the accounting, and Joshua Wolens really free, what it takes to install them and is ditching Android and taking back his
has to make it tea. if you should store your data on them! privacy with /e/OS.

4 LXF307 October 2023 www.linuxformat.com


CONTENTS

Pi USER TUTORIALS

Pi news 43 TERMINAL: Bring images to life 52


Introduced by Les Pounder, who’s looking Not known for his love of cameras,
forward to enjoying the glut of Pis that’s Shashank Sharma still knows how to turn
due to hit the shelves. images into presentable GIFs and video
clips into masterpieces.
52Pi Rack Tower 44
Les Pounder owns multiple Raspberry Pis KDE MARBLE: Mapping made easy 54
but has yet to make a cluster. Perhaps this Nick Peers reveals how easy it is to
will see him put all of his Pis on the shelf? navigate the world using a variety of
maps without leaving the comfort of
Elegoo Neptune 4 45 your home PC.
“Smoke me a Klipper, I’ll be back for
breakfast!” cries Denise Bertacchi, DIGIKAM: Manage your photos 58
feasting her eyes on this tasty 3D printer. Mike Bedford explains how DigiKam
enables you to manage your photos,
Control a Pi bot with a Wiimote 46 finding what you’re looking for with the
Les Pounder travels back to 2014, the most powerful of tools.
last time he held a Wiimote that wasn’t
embedded in an LCD TV. FORTRAN: The first high-level language 64
It might have been the world’s first
high-level language, but Mike Bedford
discovers that FORTRAN is still alive
CODING ACADEMY ADMINISTERIA and well today.

Text adventures: now in full colour! 90 Administeria 74


Nate Drake embraces ancient graphics Stuart Burns discusses the UK
and dinky sound effects in the final part government’s threat to encrypted
of our text adventure coding series. messages, plus offers tips for sysadmins.

Blast apart Breakout gaming code 94 Bitwarden 76 VIRTUALMIN: Manage a VPS 68


Matt Holder discovers that rewriting a A powerful, feature-packed open source David Bolton demonstrates how to set
classic game isn’t as simple as he thought, password manager with a free option and up Virtualmin on a free VPS and how to
so has plenty of tips to ease the process. decent pricing, thinks Mike Jennings. configure it to add websites.

ExpressVPN 77 STEAM DECK: Better gaming tips 72


Looking behind the hype machine, From external controllers to an external
Mike Williams wonders whether this VPN display, Neil Mohr offers a fistful of handy
service is as good as it sounds. gaming tips for your Steam Deck.

REGULARS AT A GLANCE

News 6 Subscriptions 16
Valve’s game-changing Proton turns five; Get your monthly Linux dose, grab yourself
kernel 6.5 hits the streets; Vim creator an Alexa Aquablaster and save money!
Bram Molenaar dies; happy birthday to
Debian; plus Distro Watch, and more stories Back issues 62
from the world of open source. Get hold of previous Linux Format editions.

Kernel watch 10 Overseas subscriptions 63


Get Linux Format shipped around the globe.
CREDIT: Getty Images, wikimedia.org

Answers 11
Diving into the darkest recesses of his HotPicks 83
enormous brain, Neil Bothwick drags Mayank Sharma would steer people away
out solutions to readers’ problems with from a future Star Wars/Star Trek crossover
backing storage, listing running GUI apps in movie and towards HotPicks, so they could
Next-gen Wi-Fi 78 a terminal, upgrading Linux Mint, and more. read about OnionShare, Bulky, Sweeper, Min,
Another new wireless technology, KDiskMark, OnionMedia X, Pwall, Nostlan,
already? Darien Graham-Smith looks Mailserver 14 DevilutionX, Paper Clip and Menu Editor.
ahead to the next-generation networking Readers share their experience of firewalls
standard, Wi-Fi 7. and FORTRAN, while others ask for advice. Next month 98

www.techradar.com/pro/linux October 2023 LXF307 5


THIS ISSUE: Valve’s game-changing Proton turns five Kernel
6.5 hits the streets Vim creator dies Happy birthday to Debian

GAMING

Proton turns five and


Linux overtakes Mac OS
Valve’s launch of Proton in August 2018 changed the face of Linux
gaming for ever. Linux numbers on Steam are also “through the roof”.
ind the clock back just five short years Steam Deck running Proton
W to early 2018. Valve’s gaming Steam
Machine had just been removed from
worked with Windows games.
As of June 2023, there were
its online store after failing to sell in sufficient over 10,000 titles rated as either
numbers. There were various reasons for this, Verified or Playable, including
but the biggest culprit was that Steam Machine gaming greats such as The Last
was using a Linux operating system, which of Us.
wasn’t compatible with most Windows games. Of course, these numbers only
Valve did try to be more platform-agnostic by apply to games available for
offering Steam Play. One of the perks of this purchase or download via the
was that if players bought, say, the Windows Steam Store. Players can easily
version of a game, they could also access the install titles they’ve bought elsewhere on to ProtonDB reports that over 11,000
Linux version. Still, most developers declined to the Steam Deck via its Desktop Mode. That games are now compatible with
go to the trouble of creating Linux versions of means it’s likely the hand-held console is Valve’s Steam Deck, which uses
Windows games, so it was little use to players. actually compatible with a great many more the Proton compatibility layer.
Valve’s next move was a game changer titles. Retro gamers, in particular, have enjoyed
to end all game changers. Partnering with playing games for older consoles, such as the
CodeWeavers, the two companies jointly SNES, via EmuDeck, although, naturally, this
developed a beefed-up fork of the Wine doesn’t require Proton to run.
compatibility layer to create Proton. According to the Gaming on Linux website’s
Initially, Proton was only compatible with a Steam Tracker, players using both
small number of Valve-selected titles but over Linux and a Steam Deck amount
time, it’s allowed many more Windows games to to just 1.96% of users (that’s ‘just’
run virtually flawlessly in Linux. The ProtonDB, 2.58 million) as of July 2023. Still,
which tracks such things, reports over 11,000 that’s a 0.52% increase on the
titles for Windows and other platforms can run previous month, meaning that,
in Linux thanks to the Proton compatibility layer. for the first time ever, Linux has
What does this mean specifically for overtaken Mac OS users, who
Linux gaming? It’s clear that the power and account for just 1.84%.
customisability of Proton was a major reason for Even combined, these figures
Valve to release its Steam Deck in 2021, which pale into nothing compared with Without Proton, we almost certainly
runs on SteamOS, a variant of Arch Linux. Windows users, but Proton’s constantly updated wouldn’t have the Steam Deck, shown
Shortly afterwards, Valve released its own changelog proves that it’s more than capable here running Armored Core VI with
Deck Rating system to score how well the of keeping up. minimal performance issues.

6 LXF307 October 2023 www.linuxformat.com


NEWSDESK

KERNEL OPINION

Linux kernel 6.5 ready to ship GAME


The stable version of kernel 6.5 has a number of OVER!
exciting updates, especially for Intel and AMD users.
n 9th July, Linus Torvalds announced
O the general availability for public
testing of the first Release Candidate
(RC) development milestone of Linux kernel 6.5.
As of 27th August, the stable version has been Joe Brockmeier
released and will be incorporated into operating is head of community, Percona.
systems such as Ubuntu 23.10 later this year.
The kernel now defaults to AMD P-State Sure, open source is
Active EPP for modern Ryzen systems, which mainstream today and
will improve power efficiency. (EDAC) Error in widespread usage, but it’s
Detection And Correction subsystem updates Updates to version 6.5 of the kernel include better also under attack from just
for the Ryzen 7000 series have also been support for the rumble feature in Xbox controllers. about every angle. This time
included, which will allow for reporting of it’s through subversion and
hardware errors via the kernel log. driver and forthcoming 802.11be chipsets, but dilution rather than the
Gamers will be delighted to discover an kernel 6.5 will also have better support for frontal assaults open source
improved controller driver for the Nvidia Shield, Wi-Fi’s MLO (Multi-Link Operation) mode. This advocates and projects
as well as rumble support for Xbox controllers. allows devices to simultaneously send and endured in the early 2000s.
Kernel 6.5 also includes initial support for receive across multiple frequency bands, Consider the moves away
USB 4 v2.0 thanks to Intel, which has also provided you have Wi-Fi 7-compatible hardware. from open source licences to
contributed initial enablement of its new The sound subsystem now supports MIDI source available licences, like
Barlow Ridge discrete controller. 2.0. The raw MIDI driver and sequencer API the Business Source License
Updates to the networking subsystem have been extended to support the new UMP (BuSL), or others with use
include preparations for Wi-Fi 7, with the lion’s protocol. The USB audio driver has also been restrictions. “We have to
share of code contributed by Intel. This has extended with MIDI 2.0 interface support. compete!” and “Developers
chiefly centred around code for its IWLWIFI Learn more at www.kernel.org. really don’t care about
licences,” they say. But their
bad business plan isn’t a
reason for the community to
accept bad licences.
OBITUARY And if developers don’t

Death of Bram Molenaar


care about licences? That’s
because we’ve failed to
educate people.
Users also need open
The creator of Vim and other projects dies, aged 62. source to protect their
options long-term. So do
n 1988, Dutch software engineer dubbing himself as its BDFL (Benevolent businesses. The right to
I Bram Molenaar released the first
version of Vim, which stood for Vi
Dictator for Life).
Moolenaar was a member of the Dutch Unix
fork, something that isn’t
preserved by the BuSL, is
Imitation. This reflected Bram’s efforts to user group, NLUUG, which presented him with important for organisations
create a workable text editor that didn’t rely an award during its 25th anniversary for his building applications and
on the code used in Vi, which required creation of Vim and his contributions infrastructure that will stand
a licence from developer AT&T. to open source software in general. for a decade or more.
Vim became one of the most He advocated for ICCF Holland, an We have got complacent.
popular text editors ever. Although NGO supporting AIDS victims in We believed open source
it’s chiefly associated with Linux, it’s Uganda, and used Vim’s popularity to had won and got tired of
available for a number of platforms, solicit donations. doing Open Source 101
including Windows and Mac OS. On 5th August, Bram’s family education and advocacy.
CREDIT: YouTube/CityTV.nl

Bram also authored the software announced his passing due to “a But open source can no
build tool A-A-P, which was written in medical condition that progressed more win than a person
Python as well as the programming Bram delivered a talk at quickly over a few weeks”. His
can be fit, once and for all.
language Zimbu, designed to make T-DOSE 2014 on Zimbu, funeral was held in Lisse, the But it can lose through slow
coders more productive. However, he which was shared by Netherlands, on 16th August. Vim erosion of values and apathy,
still found the time to work on Vim fans on social media will be continued by co-contributor if we let it. It’s time for
almost daily for over 30 years after his passing. Christian Brabandt. us to push back.

www.techradar.com/pro/linux October 2023 LXF307 7


NEWSDESK

OPINION DISTRO

NVK HAS Happy birthday!


LANDED Debian turns 30
And the Debian Project shows
no sign of slowing down. Debian remains one of the most popular Linux
distros, due to its stability and reliability.

n 16th August 1993, the late and great releases are always code-named Sid, after the
Faith Ekstrand
is an engineering fellow
O Ian Murdock announced the Debian
Linux Release as an alternative to SLS
character who regularly mutilated his toys.
Despite its great age, millions of users, and
at Collabora. (Softlanding Linux Systems). the fact it’s the basis for other popular Linux
The name itself was a portmanteau of distros, such as Ubuntu, Debian isn’t the longest
NVK, the new, fully Ian’s (then) wife Debra’s name and his own. actively maintained Linux project. That honour
open source Vulkan Successive Debian distribution code names belongs to Slackware, which turned 30 in July.
driver for Nvidia GPUs, has are based on the names of characters from Debian birthday parties are taking place in
finally landed in the main the Toy Story films, such as the most recent Belgium, Bolivia, Brazil, the Czech Republic,
Mesa branch. Included as Debian 12 Bookworm. Germany, Portugal and Turkey. You’re invited to
an experimental driver in Releases do not follow a fixed schedule but join in the fun at https://wiki.debian.org/
the 23.3 release of Mesa, come out roughly every two years. Unstable DebianDay/2023.
it’s the culmination of over
a year of work by myself
as well as Karol Herbst
and Dave Airlie at Red
Hat, and about a dozen
DISTRO SOFTWARE

SUSE goes LibreOffice 7.6


community contributors.
Special thanks also goes
to Danilo Krummrich at

private released
Red Hat, who has been
hard at work building
Nouveau kernel support
for the new memory
binding and execution SUSE has plans to be The Document Foundation
API required by NVK.
With this first release,
taken private once again releases another version of
NVK brings support for by owner EQT Partners. its powerful office suite.
Turing (RTX 20XX and
GTX 16XX) and later USE, the company behind SUSE Linux he Document Foundation announced
GPUs. We plan to
eventually support
S Enterprise (SLE), has had a number of
owners over the years. The German
T the release of LibreOffice 7.6
Community on its blog on 21st August.
hardware as far back as Linux distributor was originally founded in 1992 This will be the last release numbered in this
Kepler (GeForce 600 and and was later acquired by American software way, as TDF intends to switch to a calendar-
700 series), but those are company Novell in 2003. Novell itself was based system moving forward.
currently poorly tested at acquired by the Attachmate Group in 2011. We took the time to view the helpful
best and missing a few Attachmate and Micro Focus merged in 2014, YouTube video summarising the main upgrades
essential features. only to sell off SUSE to private equity firm EQT (https://youtu.be/AB7TbrkCTSA). For instance,
It runs on the same Partners in 2018. the suite now supports touch zoom gestures
Nouveau kernel driver as Despite an IPO on the Frankfurt Stock for touchpads in the main view, while the Linux
the old OpenGL drivers Exchange in 2021, EQT is now taking SUSE Format team was also delighted to discover
but it requires an entirely private once again. It expects SUSE to delist that Writer now incorporates one-step insertion
new userspace API. This in the last quarter of the year. Existing of page numbers.
API will be included in shareholders can still retain private You can find out more at https://wiki.
Linux 6.6 and later kernels. investments in the company. documentfoundation.org/ReleaseNotes/7.6.
You may have to build In a statement, SUSE said the move will allow
LibreOffice 7.6
your own kernel and Mesa it to “focus fully on its operational priorities and
comes with a video
if you want to give it a try, execution of its long-term strategy”. No doubt showcasing its new
but now that NVK is finally this strategy will involve continuing its work features, including
out there, you are more on SUSE’s own fork of RHEL, after Red Hat’s better support for
than welcome to play decision to restrict the availability of its source Open Document
with it! code to Linux distributors. templates.

8 LXF307 October 2023 www.linuxformat.com


NEWSDESK

Distro watch
OPINION

QUALITY
What’s behind the free software sofa? CONTROL
MAGEIA 9
Mageia started life in September 2010 as a fork of Mandriva
Linux. Unlike its forebear, the OS is a community-based, not-
for-profit project, and is based in France.
Although Mandriva fell by the wayside in 2011, Mageia has
enjoyed nine stable releases since its inception. Italo Vignoli
The default desktop is KDE. Mageia’s online repositories is one of the LibreOffice and The
also support installation of every other major desktop Document Foundation founders.
environment, and prebuilt images are available for Gnome
and Xfce, as well as the Plasma desktop. Mageia was built from When LibreOffice was
Learn more at www.mageia.org. the ashes of the former born, the developers
distro Mandriva. changed the approach from
OpenOffice.org, launching a
source code clean-up activity
KALI LINUX 2023.3 that resulted in a significantly
A favourite of penetration testers everywhere, Kali is named better quality office suite. As
after the Hindu goddess who maintains the balance of good part of this, the developers
and evil. This reflects the fact that the OS contains a number also revised their approach to
of tools used for hacking but which are intended to help users quality assurance, setting up
improve their network security. an automated process based
Version 2023.3 includes the Kali Autopilot automated on state-of-the-art tech.
attack framework. It also incorporates nine new tools, The LibreOffice project
including Rekono, an automation platform combining different uses Gerrit as a patch review
hacking tools for pentesting. The latest version of Kali tool for its integration with
You can read more at www.kali.org. includes more tools for Git. The source code is
automating pentesting. regularly compiled by a
battery of Tinderboxes, and if
the compilation is successful,
SIDUCTION 2023.1.0 it undergoes a series of
Siduction is based on the unstable Debian Sid branch. It automated tests that verify
usually follows a rolling release model but version 2023.1.0 the software’s behaviour.
was released specially in honour of Debian’s 30th birthday This is complemented by
in August (see opposite). It’s based on a snapshot of Sid, the quality assurance team’s
combined with some extra packages and the ever- work, which uses tools such
indispensable Calamares installer. as Bugzilla to manage both
Live installation media are available offering the KDE bugs and regressions, and to
Plasma desktop, as well as LXQt, Xfce, Xorg and noX. report them to developers for
Find out more at https://siduction.org. The Siduction team created fixing the source code.
a special release to celebrate The quality of source code
Debian’s 30th birthday. has improved significantly
since developers started
using Coverity Scan services
SMARTOS 20230824 in 2012. LibreOffice now has
SmartOS is an open source Unix-like operating system one of the lowest rates of
based on Illumos, a community fork of (now discontinued) defects in its source code of
OpenSolaris. It’s designed to be particularly suitable for all software packages.
building clouds and generating appliances, so has no default The stats from Coverity
desktop environment. Scan are testament to the
Releases are issued every second Thursday and include the cleaning and refactoring of
ZFS filesystem/logical volume manager, as well as multiple LibreOffice source code
virtualisation solutions, including Zones, KVM and bhyve. done since 2010. They also
Interestingly the development team claims SmartOS SmartOS is clever enough to be confirm the extent of the
containers can run securely on bare metal. able to run containers securely technical debt inherited from
Learn more at www.tritondatacenter.com/smartos. on bare metal. OpenOffice.org, which was
completely resolved
within four years.

www.techradar.com/pro/linux October 2023 LXF307 9


NEWSDESK

Kernel Watch
OPINION
PLUMB
LINE
Jon Masters keeps up with all the latest happenings
in the Linux kernel, so you don’t have to.
inus Torvalds announced the improve power management on certain future
Jon Masters is a kernel hacker
who’s been involved with Linux
L release of Linux 6.5, noting he had a
“nagging feeling that a lot of people
Xeon processors.

for over 22 years, and works on are on vacation and that things have been Downfall
energy-efficient ARM servers. quiet partly due to that”, but no giant issues This past month came the disclosure of another
had been raised during the development round of speculative execution vulnerabilities.
As I write this, it’s the cycle. As a result of the 6.5 release, the Speculative execution is a feature of all modern
US Labor Day holiday merge window (period of time during which high performance CPUs in which they attempt
weekend, the unofficial end disruptive changes can be incorporated into to mitigate the relative speed of memory (slow)
of summer that signals one the kernel) is open for what will be 6.6. versus CPU (very fast) by having the CPU guess
last hurrah before it’s back Features merged into 6.6 so far include ahead while it is waiting to load data from
to school for the kids, and the usual set of updates to work-in-progress memory. This is what was (ab)used by the
time to hunker down for Rust language support, drivers and a number Spectre and Meltdown vulnerabilities in 2018.
the adults for the final push of core kernel features. For example, it’s now Downfall or GDS (Gather Data Sampling) is
ahead of the end-of-year possible to build a kernel without support for similar to the earlier MDS (Microarchitectural
holidays. This summer has buffer heads, a legacy feature of the Linux Data Sampling), which came after Spectre and
felt more ‘normal’ than filesystem layer that had become a Meltdown. In both cases, CPU buffers intended
the past few, and it has been bottleneck, as we detailed last month. to help store values that are in the process of
great to actually see a whole being loaded from memory can leak stale data
bunch of folks face to face Linux 6.5 loaded by another program running on the
at assorted events. The latest released kernel was right on time same CPU. Downfall targets AVX (a vector
This year, I’m super- following a mostly uneventful development extension on Intel CPUs), and specifically a
excited about the Linux cycle. It includes a number of internal buffer used for gathering operations that
Plumbers Conference. I’m changes, such as support for mount-beneath combine multiple loads from different memory
looking forward to having (a feature that allows lower layers of locations. It is possible to write a malicious
hallway catchups with many containers to be updated at runtime without program that abuses speculative execution to
people I’ve not see over exposing new mounts to programs within), extract data previously loaded by another
the past few years, but also and a confidential compute (CoCo) feature program into AVX vector registers.
participating in discussions called unaccepted memory (confidential This includes various cryptographic secrets
around a number of exciting compute VMs from, for example, AMD, Arm where vector processing is used to speed up
technologies coming along or Intel must explicitly accept the memory the generation of hashes and verify checksums.
at once. One of the biggest handed to them by the host; memory not yet Thus, the attack is potentially quite serious.
to me is confidential accepted can be tracked). Users of Intel There is a workaround that can be enabled
compute (or CoCo), in server platforms might be interested in through a microcode (CPU configuration data)
which virtual machines support for Topology Aware Register and update that should be available in most major
are ‘encrypted’ and their PM Capsule Interface (TPMI) intended to Linux distributions (and from BIOS vendors).
contents can’t be examined,
even by the operator.
Finally, I want to say a few ONGOING DEVELOPMENT
words about the early death
of Kris Nova, who passed Modern CPUs implement a Return Address (SRSO) is mitigated through microcode
away in a climbing accident. Stack (RAS) that optimises the return of updates, or through forcing function returns
She was in the prime of her function calls so the CPU can guess where via a common location (safe RET). Patches
career and was particularly the next instruction will come from. This for SRSO are in distro updates but still
well known in the is similar to a branch predictor, but for being cleaned up in upstream discussion,
Kubernetes community. function call returns. A vulnerability was so further rounds of updates are likely.
She also founded and ran discovered in certain AMD Zen processors A number of announcements continue
the popular Hachyderm.io in which an attacker could mistrain these from the organisers of micro-conferences
Mastodon server from her resources such that the CPU would later at the upcoming Linux Plumbers
basement lab. I didn’t know speculatively hallucinate branches that Conference (Virginia, US, November 2023),
Kris, but from what I’ve seen didn’t exist, theoretically allowing for data such as testing and confidential compute.
of her online, she had an leakage. Speculative Return Stack Overflow Details are available at http://lpc.events.
outsized impact and
will be missed.

10 LXF307 October 2023 www.linuxformat.com


Neil
Bothwick
has the Linux
Got a burning question about open source or the kernel? kernel running
through his
Whatever your level, email it to answers@linuxformat.com wetware.

Q Sticky computer
I have a device that records data
a FAT filesystem and split the output into
files of 1GB or 2GB. Provided you only
For a file-based store, use:
$ sudo mount /path/to/file /mount/point
to a USB stick. I cannot change this, it is read from these files, and do not touch the -o loop,ro
a ‘black box’. It works fine except that in one currently being written to, you should Naturally, you are free to remount the
order to access the data, I have to stop be OK, but no promises. backing storage as read-write when not
the devices, change sticks and start a new Once you have compiled the kernel connected to the host device.
session. Is there a way to connect a Linux and rebooted, you create somewhere for
box to the USB ports on the device so that
it sees the Linux box as a USB storage
the data to be written, called the backing
storage. This can be either a hard disk
Q Starting with X
I was wondering if there is a way,
device and records the data to its hard partition or a file. A partition is easiest – in a terminal, to show what GUI programs
drive? I have not heard of such a thing, all you need to do is format the partition are running in Xorg. Something like
but it would mean I could access the data with an appropriate filesystem and tell the FVWM’s FvwmIconMan or the Workspace
while it was running. module to use it, for example: List menu of Blackbox, except it would be
Alex Bennett $ sudo mkfs.vfat /dev/sdb2 a command-line program that prints a list
$ sudo modprobe g_mass_storage file=/ of the running programs in the console. In
A There is a solution using the Linux
kernel gadget class, but it has a
dev/sdb2
If you want to use a file as the backing
other words, like ps but only for GUI.
Leo Frost
couple of drawbacks. The first is that the storage, create and format it with:
kernel module used for this, g_mass_
storage, is not normally enabled on
$ dd if=/dev/zero bs=1G count=16 of=/path/
to/file
A At first this seems like a simple
request, then on further thought, it
distribution kernels, so you most likely $ mkfs.vfat /path/to/file is more complex a problem. In fact, it turns
need to install the distro’s kernel source This creates a 16GB (bs x count) file – out to be so simple that there are several
package, enable the CONFIG_USB_ give this as the file option for the module. ways to accomplish this. One such option
MASS_STORAGE option, then recompile Now you can connect your USB cable, is pstree. As the name implies, this is like
it. The other drawback is that the and your black box device should see the ps but it outputs processes in a tree-like
filesystem you use to receive the data ‘USB stick’ you have created. To avoid any format. Unlike ps, you can start the tree
is mounted on the other device, so any chance of data corruption, when you need with a particular process ID, showing only
changes to it from your computer will to access the backing storage, you should children of that process:
probably cause corruption. However, most mount it read-only, like this: $ pstree $(pgrep Xorg)
devices that record to USB storage expect $ sudo mount /dev/sdb2 /mount/point -o ro This uses pgrep to get the PID of Xorg
and then gives that as an argument to
pstree. Some desktops, particularly those
using Wayland, need a different parent
process. You may need to tweak pstree’s
arguments to get the style of output you
need, or even process it with sed or awk .
One thing to bear in mind is that if more
than one user is running an X session, this
fails. You can use the -o option with pgrep
to return only one PID, but there’s no
guarantee it’s for your session.
The output from pgrep is verbose, it
lists every process running under the X
(or Wayland) server. If you actually just
want a list of windows opened by these
programs, you have a couple of choices.
Use $ xlsclients for a brief list, though
we found it omitted some programs that
had windows open, including the editor
being used to type this and the terminal
Hidden away in the rarely visited corners of the Linux kernel is a way to make your computer from which it was launched. A more
appear as a USB storage device. complete list is given by $ wmctrl -l .

www.techradar.com/pro/linux October 2023 LXF307 11


ANSWERS

A QUICK REFERENCE TO… RECOMPILING YOUR KERNEL


How often have you seen a package like build-essentials configuration file containing asked. Now compile and
question answered with a glib that installs all you need for the same options used to install the kernel with:
“recompile your kernel with compiling software. Open a build your current kernel, so $ sudo make all modules_
option X”. It may sound scary, terminal and run: you only need to find what install install
but it’s quite simple to modify $ cd /usr/src/linux to change. Press / to bring This builds everything,
a kernel setup. First, make $ sudo make menuconfig up the search box and type installs the kernel modules
sure you have the correct You’ll want to enlarge in the name of the item you then copies the kernel to
kernel source package your terminal window, need. This shows you some /boot. Run update-grub
installed; the one that because this opens details and a key to jump to to add your new kernel to
matches your existing kernel the kernel configuration it – press Space to select it. the boot menu and reboot.
is the place to start. You also program with gazillions of Repeat for any other options In case of problems, boot
need the GCC compiler and options. The kernel source then follow the exit signs, your old kernel and revisit
friends – many distros have a package should include a saving the config when the options you changed.

You may have to install wmctrl from information about input events; the -event For a graphical approach, there is
your distro’s package manager. It can also option limits the display to button presses Input Remapper, available from https://
list open desktops and other information so you avoid reams of output as you move github.com/sezanzeb/input-remapper.
about the desktop environment as well an the mouse. Press each of the buttons you This is not in most distros’ repositories,
manipulate your open windows: moving, want to disable and note its number. Let’s but installation files, including a DEB for
closing or resizing them. say they are 6 and 7 – so, using the ID of Debian/Ubuntu/Mint, are on the releases
your mouse, run: page. Once installed, you need to enable

Q Button it
I need a utility to disable the third
$ xinput set-button-map [ID] 1 2 3 4 5 0 0 8 9
What xinput does is remap the mouse
and start the Input Remapper service:
$ sudo systemctl enable --now input-
and fourth mouse buttons on my Logitech buttons. The order of the arguments is the remapper
Marble Mouse. I use Advanced Mouse original button numbers, the arguments Then you can run the graphical
Manager on Windows, but can’t find an are the buttons to map them to, so this program to modify the behaviour of
equivalent for Linux Mint. command remaps the sixth and seventh your mouse and other input devices.
Ryan Scott buttons to button 0, which disables them.
You can also use this to swap buttons
Q Different kernels
A You can do this with the xinput
command, without installing any
around. So, to swap buttons 1 and 3, the
left and right buttons, for those who prefer
I installed the HWE kernel on
my Linux Mint system a few years ago
extra software, or there is a graphical a left-handed mouse, run: when I got a new computer and the stock
program you can use. To use xinput , you $ xinput set-button-map [ID] 3 2 1 4 5 6 7 8 9 kernel didn’t yet support the graphics.
need to get your mouse’s ID by running: The xinput command runs for the Now it does, and I’m unsure what steps I
$ xinput list current session only, so if you mess should follow to bring things back to the
Then you need to find the number of things up, simply log out or reboot and standard configuration.
each button you want to remap, which everything will be back to normal. Once Kernels in Update Manager shows
may be different from what you think you find the command that gives you 5.19.0-50 as installed and active, and
because scroll wheels are also seen as what you want, add it to ~/.xinitrc or set the only other installed kernel is 5.19.0-
buttons. Run $ xev -event button in a your desktop environment to run this 41. The 5.15 series is listed but none are
terminal. It opens a window showing command at startup. installed. Apt shows six HWE packages in
place: linux-generic-hwe, linux-headers-
generic-hwe, linux-hwe-5.19-headers,
linux-image-generic, systemd-hwe-hwdb.
Will it work to install and make active
the newest 5.15 kernel, boot it, and then
(when I’m sure it’s working) uninstall
the HWE packages with Apt? Will the
presence of the HWE packages interfere
with putting a 5.15 kernel in place? (In
other words, should I do the Apt removal
first?) Will I have to remove the 5.19
kernels myself?
Luke Thomson

A Provided there is sufficient space


in /boot, you can have as many
kernels installed as you want and they do
not interact with each other. So, you can
Input Remapper enables you to change the behaviour of mouse buttons and keyboard, as well as being a good install the newest 5.15 kernel using Apt
way to play practical jokes on friends who leave their computers unlocked. or a graphical software manager, then

12 LXF307 October 2023 www.linuxformat.com


ANSWERS

choose it from the GRUB menu when you


reboot. Do not remove any other kernel
until you are sure the new one works, or
you could end up with an unbootable
computer. To be safe, we recommend
leaving the HWE kernel installed for a
while; the computer booting from the
new kernel is a good sign, but there is the
possibility that it could cause problems in
certain situations – however unlikely.
Because of the lower version numbers
on the standard kernels, they may appear
below the HWE kernels in the GRUB
menu, meaning the default is still to boot
from HWE. You can fix this by changing
the setting for GRUB_DEFAULT in /etc/
default/grub. Either set it to a different
number – the menu entries are counted
from zero – or set it as: There is no need to reinstall Linux Mint when a new version is released. Mint Updater provides a
GRUB_DEFAULT=saved smooth transition between releases.
GRUB_SAVEDEFAULT=true
Then GRUB remembers which kernel you need to make sure you have the latest you want to remove the last word, not the
you booted and uses it as the default for version 20 installed. Open the Update first, but don’t worry because we have
next time. You need to run $ update-grub Manager as usual and under the Edit menu rev . This is part of the util-linux package
after editing /etc/default/grub to apply you should find an option to upgrade to that’s installed by default on all distros.
the changes to the menu configuration. the next version of the distro. As you are It takes a series of lines from a file or on
currently on 20.2, this should be 20.3. standard input and reverses each one:

Q Fresh Mint
I am currently using Linux Mint
Once you are at the latest version of
Mint 20, open a terminal to install and run
$ echo “Hello World” | rev
dlroW olleH
20.2 and want to install Linux Mint 21.2 the Mintupgrade tool – this handles major So, if we reverse the lines in your file,
Victoria. During the installation, where version updates: remove the first word (which was the last),
it is asking to create a user, can I use the $ sudo apt update then reverse it again, you get exactly what
same username ‘dave’ from Linux Mint $ sudo apt install mintupgrade you want:
20? And if I use the same username, will $ sudo mintupgrade $ rev file.txt | cut -d ‘ ‘ -f 2 | rev >newfile.txt
all my files and config files still be there in The first command updates the And there you have it: the utter
/home/dave or will it erase everything? package list. Then Mintupgrade opens a simplicity of the Unix approach of
Harvey Shepherd graphical program to guide you through combining several small and simple
the upgrade process. Doing it this way, programs in a pipeline to achieve
A This is not a good idea. Installing
over the existing setup erases not
you keep all your existing software – but
upgraded to the latest available versions
something more complex.

only the operating system but also your – and files with no need to change to GET HELP NOW!
personal files. That is, if you have gone configure anything. Make sure you hit the
with the default Mint installation of having Refresh button each time you start the We’d love to try to answer any questions
everything on a single partition. If you Update Manager, so that it downloads you send to answers@linuxformat.com, Subscriptions: for magazine issues email help@mymagazine.co.uk
have /home on a separate filesystem from the latest list of available software. no matter what the level. We’ve all been
/ you can install over the existing distro stuck before, so don’t be shy. However, we’re
without affecting your personal files.
However, you still erase any system-wide
Q Backing up text
I have a text file containing a
only human (although many suspect Neil is
just ChatGPT), so it’s important that you
configuration you have done. That number of lines each containing several include as much information as you can. If
includes any software you have installed in words. The number of words on each line something works on o ne distro but not
addition to the basic distro. Even if you do varies, but I need to remove the last word another, then tell us. If you get an error
this, Linux bases file permissions on the from each line. I know I can use cut or message, please tell us the exact message
numeric IDs of users – the names are a awk to identify the last word, and I could and precisely what you did to invoke it.
convenience for us mere humans. If you then use sed to remove it, but this seems If you have, or suspect, a hardware
only have one user, then that user is likely complex and prone to error. Is there a problem, let us know about the hardware.
to be created with the same UID – users simple way to script this operation? Consider installing hardinfo or lshw.
normally start with UID 1000, IDs below Lucy Doyle These programs list the hardware on your
that are reserved for system services. But machine, so send us their output. If you’re
if you have more than one user, you need
to ensure the IDs match.
A There is an easy way to remove the
first word from a line with cut :
unwilling, or unable, to install these, run the
following commands in a root terminal and
The Mint developers have said in the $ cut -d ‘ ‘ -f 2- <file.txt send us the system.txt file, too.
past that reinstalling is not the way to go, The -d option sets the field delimiter to uname -a > system.txt
as there is a way to upgrade to the new a space (the default is tab), then -f 2- tells lspci >> system.txt
version without reinstalling everything, cut to print everything from the second lspci -vv >> system.txt
and then having to reconfigure it. First field onwards. That’s all well and good, but

www.techradar.com/pro/linux October 2023 LXF307 13


Mailserver
MAILSERVER

WRITE TO US No sense!
While I agree that you can’t
Do you have a run pfSense on a Raspberry
burning Linux-
Pi, I take issue with the
related issue
assumption that pfSense
that you want to
discuss? Write doesn’t support the ARM
to us at Linux architecture (Build Your Own
Format, Future Hardware Firewall, LXF305). I
Publishing, own one of Netgate’s 1100
Quay House, appliances, which is based on
The Ambury, a dual-core ARM Cortex-A53
Bath, BA1 1UA or 1.2GHz processor. Likewise,
email letters@ the Negate 2100 is also based We wouldn’t complain if that were our upscaled video…
linuxformat.com.
on the same processor.
Admittedly, users have to purchase these ARM- and this product also has a separate console output
based products from Netgate to run pfSense on (RS-232 COM port), which connects to a laptop
ARM and cannot just install this code on their own USB port. Given that pfSense upgrades can take
generic ARM device. 10 to 20 minutes or so to download and install on
One feature I would advocate that wasn’t slower devices, it really helps to be able to view the
mentioned in your article is being able to monitor progress and resist the urge to reboot before the
the firewall via a console port, which is particularly upgrade is complete.
useful if you tend to install regular pfSense updates Chaz Curran
or tinker with the firewall. The remote Webgui
interface is the much preferred option when Neil says…
configuring the pfSense firewall – however, when To be fair, we were talking about publicly available
upgrading or rebooting the firewall, the console port builds of pfSense. While I’m sure it’s possible,
is extremely useful for monitoring progress and compiling ARM binaries on non-ARM systems (which
viewing any errors. a lot of readers would be doing) can be a pain and
The Netgate appliances have a console port as takes an age. But that’s great advice about the serial
standard, I also have a generic x86 fanless four- interface that is easily overlooked these days.
network port box configured as a backup firewall,
Upscale funk
As a long-time subscriber, it’s great to see the
magazine filled with such useful features. I’ve
enjoyed reading about new AI-based software to
upscale and improve images, but is there anything
like this to improve videos? I have a few videos
recorded in formats such 3GP and MPEG on mobile
phones, and I would love to be able to improve the
quality of both the picture and sound. Is anything like

CREDIT: www.netgate.com
this available?
Tom Morgan

A solid Neil says…


choice if
you fancy
This is a great suggestion. I’ve seen plenty of people
a hardware out there popping out SD upscales of video, so it’s
firewall. an interesting topic we should tackle. I don’t think
Helpdex

14 LXF307 October 2023 www.linuxformat.com


MAILSERVER

LETTER OF THE MONTH


A right card!
I always enjoy articles about how programming used to be done –
particularly in FORTRAN. This was the first computer language I was
employed to write, in 1979. There is one problem that never seems to
be mentioned – how do we store the source code for the program?
In the early years, source code was stored on cards inherited
from the textile industry. In a FORTRAN program, each line of code
was stored on one card. As there could be several thousand lines of
code, one program could easily have this number of cards.
The GOTO statement was a very useful device to minimise
the number of lines of code and hence the number of cards in
a program. I remember working on one program, which, after
reduction using GOTOs, was still over 1,200 lines long.
In order to understand the program and modify it, I needed to

CREDIT: Arnold Reinhold, CC BY-SA 2.5, https://commons.wikimedia.org/wiki/File:FortranCardPROJ039.agr.jpg


You don’t have to run Windows in a virtual machine, but it expand it, eliminating the GOTO diversions. I did this by printing it out
does make us feel safer. on a continuous sheet of paper, cutting it up with scissors, laying the
pieces of paper on my desk, and writing the reordered program
Mayank has covered anything in HotPicks, but I did together with the GOTO target sections that had been duplicated.
spot this, though not sure if it’s maintained: https:// After I had done this, there were more than 2,000 lines of code.
github.com/k4yt3x/video2x. We’ll look into it! Editing – changing the program to do something different – was
not practical. A new set of cards would be needed anyway. It was
Want to know more? quicker and, in my opinion, safer to write the new program from
So, for work I had to use Debian in VirtualBox running scratch. Spaghetti code resulted from a design method that had a
on Windows 10, and I ended up loving it. Over the main aim of reducing the number of lines of code. As programmers
few months I was using Debian, I learned so much, did not understand why program length reduction was useful, they
and now Windows as my default OS leaves me persisted in writing spaghetti code far longer than was needed.
feeling a bit let down. I still play some games, though, JJ Reynolds
so don’t want to entirely drop it.
Ideally, I’d switch, using Linux as the primary and Neil says…
Windows in VirtualBox, preferably using the GPU. Many thanks for your insightful letter. It’s great when readers tell us
What would I need to do, because I don’t want to their own experiences with these systems decades on. It really helps
mess anything up? Are there any other options I paint a better picture of what was entailed in dealing with them.
should consider?
Marty Combe

Neil says…
Our normal advice for people wanting to run both
Windows and Linux is to pick up a second hard drive
and dual boot. SSDs are pretty damn cheap now –
240GB will set you back around £15 for either a SATA
or last-gen PCIe v3 NVMe model. Install Windows
first and then your flavour of Linux. You can still run
Windows in a VM if you want, but unless you have a
pretty recent processor and graphics card, software
virtualisation of the GPU won’t be an option and Honestly, coding kids today don’t know they’re born!
pass-through is a pain to configure.
shane_collinge@yahoo.com

www.techradar.com/pro/linux October 2023 LXF307 15


SUBSCRIBE Save money today!

With every print or bundle


subscription, receive an
Alexa Aquablaster
Worth £49.99!
Boompods Aquablaster
GIFT H Bluetooth 5 portable
WORT
9.99! speaker with Alexa!
£4 miss o
ut,
Don’t ribe now!
Amazon Alexa approved product.
subsc Tough multilayered construction
with a built-in microphone.
Call functionality, including
play and pause.
Alexa can be used at a touch by
connecting to the Boompods app.
A host of attachment options.
Fully drop-tested and it’s IPX7
waterproof to suit all conditions.

SUBSCRIBE NOW!
www.magazinesdirect.com/LIN/C45D
Call 0330 333 1113 and quote C45D
16 LXF307 October 2023 www.linuxformat.com
Save money today! SUBSCRIBE

PLUS: Exclusive access to 1

1) Only available to www.magazinesdirect.com subscribers


the Linux Format subs area!
Thousands of DRM-free
PDF back issues and
articles! Get instant
access back to issue
66 (May 2005) with
tutorials, interviews,
!
features and reviews.
DON’T MISS
Includes 5 ye
ser
ars
&
At linuxformat.com
of Linux U
Developer
issues
OUTSIDE
CHOOSE YOUR PACKAGE! THE UK?
Turn to page
for more grea63
subscriber t
Four manageable payments over the course of the year, giving deals!
you a year’s worth of issues in a flexible, affordable way.

ANNUAL PRINT EDITION ANNUAL PRINT + DIGITAL EDITION DIGITAL EDITION

SAVE! SAVE! SAVE!


20% 47% 39 %
PLUS! PLUS!
Only Only Only
£16.75 every 3 months
£23.00 every 3 months
£13.75 every 3 months
13 issues of Linux Format in print 13 issues of Linux Format over 12 months 13 issues of digital Linux Format
over 12 months, saving 20%! in print and digital, saving 47%! over 12 months, saving 39%!

*Terms and conditions: Offer closes 31/10/2023. Offer open to new UK subscribers only. Pricing is guaranteed for the first 12 months and we will notify
you in advance of any price changes. Please allow up to six weeks for delivery of your first subscription issue (up to eight weeks overseas). Your gift will be
delivered separately within 60 days after your first payment has cleared. Gifts only available to subscribers on the UK mainland. Gift not available with a digital
subscription. Gifts only available in the colour black. The full subscription rate is for 12 months (13 issues) and includes postage and packaging. If the magazine
ordered changes frequency per annum, we will honour the number of issues paid for, not the term of the subscription. For full terms and conditions, visit www.
magazinesdirect.com/terms. For enquiries please call +44 (0) 330 333 1113. Lines are open Monday-Friday 9am-5pm UK time or email help@magazinesdirect.
com. Calls to 0330 numbers will be charged at no more than a national landline call, and may be included in your phone provider’s call bundle.

www.techradar.com/pro/linux October 2023 LXF307 17


Make Python work for you with tutorials on coding with Django,
Flask, Pygame and even more useful third-party frameworks.
REVIEWS
WD Black 8TB HDD
Shane Downing likes more performance in his performance products.
he WD Black is supposed to be the pinnacle of
SPECS
Capacity: 8TB
T consumer hard drives and resides above the
WD Blue in WD’s product stack, but things
Model: aren’t always what they seem. That can be particularly
WD8002FZWX true with storage products with differing types of
£ per TB: componentry but the same name. For instance, the
£35.63 8TB WD Black here comes with less DRAM cache and
Interface: a lower sustained transfer speed than another version
SATA 6Gb/s of the drive that has the exact same 8TB WD Black
Factor: 3.5-inch naming, sticker and branding — the model number is
Tech: CMR the only way to tell the difference between the two. We’d say this isn’t
Speed: Our 8TB WD Black also has a smaller DRAM cache living up to the usual
7,200rpm and a lower sustained transfer speed than Seagate’s WD Black reputation.
Rate: Up to top-end FireCuda, so it’s not expected to go toe-to-toe
238MB/s with the competing flagship. However, it is still part of
Cache: 128MB WD’s Black line-up, which has a reputation as a high- 7,200rpm for the Black. The Blue has higher latency
Power: 8.7W performance brand, and current pricing price puts it in and a lower sustained transfer rate as a result, although
Noise: 34dBA the FireCuda’s crosshairs. That’s not to mention the it also takes less power and makes less noise.
Workload: N/A “Gaming” branding in the Black’s product description, DiskBench brings disappointing results. The faster
MTBF: N/A which exposes it to competition from far faster SSDs. version of this 8TB model, with its 256MB cache and a
Warranty: However, while the faster Seagate FireCuda only higher transfer rate, would perform more closely to the
Five years comes in 4TB and 8TB flavours, the WD Black does Seagate FireCuda in this test. However, this pared-back
offer a wider range of capacities, including 10TB, which 128MB version of the 8TB WD Blue trails woefully in
works in its favour. Still, WD also needs to distance this this test — the FireCuda is 56% faster at writing files.
from its own WD Blue HDD line, which is a tough drive Official write specifications are only part of the
to beat in terms of bang for your buck. picture. Most HDDs implement a write cache, which
is a fast area of volatile memory, such as DRAM.
At all costs Sustained write speeds directly hit the platters and
The 8TB WD Black hard drive costs £285, or about 35 tend to be consistent. Sustained write performance is
pence a GB, which is almost £80 more than the 8TB not bad, but it is below expectations for a higher-end
Seagate FireCuda at the time of review. Pricing for drive. The other 8TB model would perform at a higher
consumer hard drives has been volatile, and the level, but in the current market, this model is the one
FireCuda was much cheaper when we reviewed it, but that’s available and facing Seagate competition. The
the closer price now makes this more of a competition. overall performance makes this particular Black more
The WD8002FZWX 8TB Black uses CMR of a compromise. Current pricing favours the FireCuda.
technology at 7,200rpm but with a smaller 128MB We use the Quarch HD Programmable Power
cache and a sustained transfer rate of just 238MB/s Module to gain a deeper understanding of power
compared to the FireCuda’s 260MB/s. The Black does characteristics and it turns out the drive is not very
have a WD8001FZBX version with a 256MB cache and efficient; the Blue is much better. If you need the extra
better performance at up to 263MB/s, but that model performance, the FireCuda makes more sense.
is more difficult to find and generally more expensive.
The WD Black is available in various capacities, from
500GB to 10TB, making it more flexible than the 4TB/
VERDICT
8TB FireCuda. Both come with a five-year warranty but DEVELOPER: Western Digital
Seagate includes a three-year data recovery service. WEB: www.wd.com/black
This particular Black has the same 128MB cache as PRICE: £285
the WD Blue, but the Blue’s paltry two-year warranty is
a big drawback. Also worth consideration is the price FEATURES 7/10 EASE OF USE 7/10
difference, as the Blue is currently £90 less at the 8TB PERFORMANCE 5/10 VALUE 4/10
capacity point. It’s probably not worth the premium if
you’re just looking for extra space, and avoiding the Mediocre performance, and the pricing is hard to swallow. It
slower SMR tech of the BarraCuda is an easy decision. does have WD’s full warranty and would be OK for a budget
The Black is intended to be the high-performance gaming or storage drive, but the WD Blue is the better buy.
line of consumer hard drives, while the Blue is more
entry-level. In this case, the primary difference is the Rating 5/10
spindle rate — 5,400rpm for the 8TB Blue, against

www.techradar.com/pro/linux October 2023 LXF307 19


REVIEWS Graphics card

AMD Radeon RX 7600


With so much competition in the market, Chris Szewczyk tries to work
out whether the new RX 7600 does enough to beat the pack.
ollowing the release of the Radeon RX 7900 XT,
SPECS
GPU: Navi 33
F AMD surprisingly followed up with the ‘budget’
second desktop RDNA 3 GPU, the Radeon RX
Arch: RDNA 3 7600. It’s easily the cheapest of the current generation
Process: of GPUs from either AMD or Nvidia, though it’s important
TSMC 6nm not to overlook Intel’s Arc cards, at least regarding value.
Clock: AMD promotes the RX 7600 as a card for mainstream
2.6GHz boost 1080p gamers. Its purpose is to bring competitive
Mem: 8GB performance plus the latest technology and features
GDDR6, 128-bit, down to an affordable price point. But don’t go expecting
288GB/s wonders from the RX 7600. It’s not a magical card that
Stream: 2,048 will compete with the top cards of the Radeon RX
Compute: 32 6000-series. It’s nowhere near. It’s best described as
RT cores: 32 an affordable upgrade for mid-tier GPUs of yesteryear.
AI cores: 64 Think cards like the RX 580 or GTX 1060 and you’d be
ROPs: 64 on the right track.
Cache: 32MB Then there’s the elephant in the room. AMD did miss
TGP: 165W a trick by sticking with 8GB of VRAM. It’s enough for
Die: 204mm² 1080p in almost every current game, but can we say that
Trans: 13.3B two years from now? What if the next Grand Theft Auto
turns out to be a VRAM-hogging monster? 192-bit and
12GB of VRAM would have given the card more appeal
and a longer life. We’re seeing popular cards like the GTX In the years
to come, 8GB
1060 and RTX 2060 6GB running into limits now, and will become
there’s no reason to expect the RX 7600 won’t hit similar a bottleneck.
limits in a couple of years’ time, if not sooner. It’s a question
There are things we love about the card. It’s got a good of how soon.
media engine that includes AV1 encode and decode
support up to 8K, DisplayPort 2.1 and support for up to
four simultaneous 4K displays at 144Hz each. That step behind the more advanced 5nm node of the RX
makes it a very capable HTPC or productivity GPU. 7900 cards. That’s surely for cost reasons.
There’s nothing else available (yet) at its £250 price point Even though the RX 7600 comes with faster memory
that ticks all of those boxes. and more bandwidth, it’s still not a major upgrade. We
The RX 7600 is the first card to be released with just can’t get used to 128-bit buses on mid-range cards.
The RX 7600 is the brand new Navi 33 GPU. Unlike the Navi 31 chiplet We had 512-bit buses going all the way back to the HD
something of a
media powerhouse, design found inside the RX 7900 XT and RX 7900 XTX, 2900 XT from 2007! There’s also the PCIe 4.0 x8
able to power four Navi 33 is a more traditional monolithic or single-chip interface. That shouldn’t impact performance in any way,
4K displays at 144Hz. design. It’s built on TSMC’s 6nm node, which is a small at least on a modern system, but sometimes it feels like
we’re getting graphics cards that have adequate specs,
rather than something that makes you sit up and say
“Wow!” That goes for all GPU vendors, not just AMD.
The RX 7600 includes 32MB of Infinity Cache. That’s
an L3 cache that AMD says reduces the need for ultra-
fast memory. AMD claims this gives the memory
subsystem an effective bandwidth of 476.9GB/s.
As AMD is positioning the RX 7600 as an RX 6600
replacement, it’d be remiss not to mention the power
consumption, which has increased to 165W, up from the
132W of the RX 6600. It’s not a dramatic increase but it
is around RX 6600 XT levels and higher than the RTX
4060 Ti, so it will be higher again over its upcoming
Nvidia competitor, the yet-to-be-released RTX 4060. At
least the RX 7600 doesn’t require a power adaptor; it
makes do with a single eight-pin PCIe power connector.
We can expect AMD to release FSR 3 this year. It’s set
to bring its own version of Frame Generation to the table,

20 LXF307 October 2023 www.linuxformat.com


Graphics card REVIEWS

INSIDE RDNA 3
Think of RDNA 3 as a translation of what AMD’s achieved with
chiplets in the CPU world with its Ryzen chips – two chiplets
connected by a high-bandwidth interconnect. The thing is, when it
comes to the graphics world, you need an even bigger interconnect
and even more chips chock-full of transistors to get the job done.
Let’s start with the biggest chip, the GCD. This is the largest
component inside the Navi GPU. And within the GCD lie the
foundational computational cores that power the AMD RDNA 3
gaming experience, the compute units (CUs). Much like in RDNA 2,
these are divided up into dual compute units, which means they
share access cache and memory, although most of their constituent
The brand new Navi 33 GPU
makes its debut inside the RX 7600. parts are discrete to each CU.
Each CU contains 64 stream processors (SPs). These are the
driving force behind rasterised gaming performance on any AMD
and is supposed to rival Nvidia’s DLSS 3. The RX 7600 GPU. AMD brags a 2.7x increase in shader FLOPs (floating point
is certain to support FSR 3. If you appreciate the extra operations per second) versus RDNA 2.
performance FSR 2 brings, FSR 3 promises to be better. Ray tracing accelerators introduced with RDNA 2 are back,
The RX 7600’s sweet spot is 1080p. At high settings, including new hardware for specialised box sorting, aimed at pushing
with the exception of the ultra-punishing Cyberpunk efficiency up for ray-traced workloads. It’s all for a pretty serious
2077, the RX 7600 is capable of the all-important 60fps finessing of the entire RT pipeline in RDNA 3, and it’s clearly working
or higher. Less demanding but popular games such as for AMD, with a focus on reducing bandwidth requirements, and the
DOTA 2 purr along at well over 100fps. pressure on ALUs to perform RT tasks has put it on a better footing
Notably, AMD has yet to catch up to Nvidia in terms of versus the competition in ray-traced games.
ray tracing. It struggles to match the RTX 3060 when AMD is introducing Infinity Links with RDNA 3. These are a way
there’s heavy ray tracing involved, but generally pulls to transfer heaps of data at a rapid pace between chiplets on the
ahead of it in more traditional raster rendering, as we see Navi GPU. The resulting performance is 3.5TB/s across the new
in Warhammer III. We’d argue that ray tracing isn’t all that interconnect, and to be able to offer that for less than 5% GPU
important on mid-range cards that lack grunt anyway. power consumption.
We’ve spent a lot of time comparing or contrasting the
RX 7600 to Nvidia’s offerings, but don’t dismiss the Intel
Arc A750. Its performance is a bit hot and cold, but it has uncomfortable. We’d expect the premium tier partner
definitely improved since its release, and it’s now far cards to be effectively silent.
cheaper than the RX 7600. The card’s performance is best described as adequate,
The RX 7600 tends to run out of horsepower at though that’s mostly in respect to demanding titles.
1440p, at least at high settings in demanding games. There are millions of gamers playing games from a few
There’s nothing stopping you from dropping the image years ago or esport titles who are looking for a modern
quality a notch or enabling FSR to boost your 1440p card for a good price. The RX 7600 is just such a card.
performance, though. If you want 60fps-plus for high The RX 7600 isn’t quite the budget hero gamers have
refresh monitors in all modern games, you’ll have to take been waiting for. Unless you’re coming from a GTX or an
a step up to a better and hence more expensive card. AMD Vega, the performance gains may not be worth it.
The RX 6700 XT remains a solid option. But its modern features, display capabilities and
The little RX 7600 ran hotter than we expected but a compact size will appeal to more than just gamers.
peak temperature of 72°C is nothing to worry about. Still, the card still leaves us wishing for more. It doesn’t
You can expect the bigger partner cards to run a lot do enough to appeal to RX 6000 or RTX 30-series
cooler than that. It’s a quiet card, too. At no stage did owners, and its 8GB and 128-bit bus will begin to look
the fans ramp up to anywhere near a level we’d consider weak as we move into 2024 and 2025.

VERDICT
DEVELOPER: AMD
WEB: www.amd.com
PRICE: £250

FEATURES 8/10 EASE OF USE 9/10


PERFORMANCE 7/10 VALUE 8/10

Good value for money, but it doesn’t do enough to excite, and


it faces tough competition from all sides. We’re left wishing
the RX 7600 brought a little more to the fight.

Rating 7/10
In games at 1080p, you can expect 60fps or more from the RX 7600.

www.techradar.com/pro/linux October 2023 LXF307 21


REVIEWS Window manager

Window Maker Live


Nate Drake gets into the frame of things with Window Maker – a
desktop experience reminiscent of a ’90s Mac.
n describing Window
IN BRIEF
Window Maker’
I Maker, we can do no better
than quote the homepage:
is an X11 “Window Maker is an X11 window
Window manager originally designed to
manager that provide integration support for the
enables you to GNUstep desktop environment,
relive the glory although it can run standalone. In
days of OS X every way possible, it reproduces
with colourful the elegant look and feel of the
appicons and a NeXTSTEP user interface.”
clunky interface NeXTSTEP was an operating
to boot – system based on Unix-derived BSD.
provided you After its developer’s acquisition by
have the Apple in the mid-’90s, elements of
patience for the NeXTSTEP GUI were integrated
setup. into OS X. Our Window Maker desktop in Xubuntu. Double-click title bars to hide windows. Create
If you feel like a trip down shortcuts by dragging icons to the app dock.
memory lane, the good news is that
SPECS Window Maker is compatible with virtually every Unix- can also move and resize windows by clicking and
CPU: 1.0GHz+ based OS, including Linux, Solaris and BSD. dragging the title bar or dragging borders respectively.
Mem: 512MB If you’re used to installing via a graphical software The documentation states that the right-hand side
HDD: 5MB centre, the bad news is that this cross-platform of the desktop contains an application dock, which you
Builds: Any compatibility comes at a price, as the main page can use to launch familiar apps via a double-click.
advises compiling the program from source. Although this was notably absent in our tests on an
Ubuntu 23.04 VM, it appears you can add new apps via
Snaggy setup dragging and dropping their icon into the dock.
In theory, this isn’t a major issue, as the website The Window Maker website contains a number of
documentation section has an installation guide. Sadly, themes to overhaul its look and feel. The Themes page
this is where we ran into snags, though we were able explains that installing is a simple matter of unpacking
to compile and install wmaker on Ubuntu and the tarball to ~/GNUstep/Library/WindowMaker.
Peppermint OS (which uses XFCE), subject to installing When we tried this in an Ubuntu Gnome 23.04 VM,
all the required dependencies, such as libjpeg-dev, the system crashed. Fortunately, the website has a
which helps to display different backgrounds. large collection of screenshots where better men than
But when we tried to choose Window Maker as the us have succeeded in configuring the UI to their needs.
window manager from the login screen, the desktop If you have your heart set on a nostalgic desktop
failed to load. We eventually managed to get a session experience and find default X sessions just aren’t doing
running in an Xubuntu VM by installing wmaker and it for you, you can relive the early days of OS X via
wmaker common from the Ubuntu repositories. Window Manager. We recommend compiling and
Assuming you succeed in launching Window Maker, executing the source code in a VM first, though.
you’ll discover a few minimalist icons floating around
the desktop. Right-click to configure system settings
and launch applications. This interface will be familiar
VERDICT
to anyone who’s used Xfce (or indeed NeXTSTEP), in DEVELOPER: Window Maker Developers
that disabled options are greyed out. Options marked WEB: www.windowmaker.org
with a triangle can be selected to open a submenu. LICENCE: GPL 2.0+
If you use the menus to launch an application, a
corresponding square appicon opens at the bottom of FEATURES 7/10 EASE OF USE 5/10
the screen. You can click the minimise button at the PERFORMANCE 6/10 DOCUMENTATION 8/10
top-left of any window to iconify it. If you select
individual windows, the title bar appears black. This is Window Maker enables you to relive the glory days of Mac
referred to as a focused window in the documentation, OS X, but setup and configuration could be easier.
which can do things such as accept keyboard inputs.
Windows can also be shaded by clicking on the title Rating 7/10
bar. This hides everything except the title bar itself. You

22 LXF307 October 2023 www.linuxformat.com


BSD distribution REVIEWS

OPNSense 23.7
Nate Drake has the good sense to try out OPNSense, a powerful
firewall distro based (in a roundabout fashion) on FreeBSD.
PNSense is one of the
IN BRIEF
What do you
O most popular specialist
operating systems
mean, “We only designed specifically for firewalls
cover Linux?” and routers. It boasts a proud
This open ancestry, given the OS is a fork of
source BSD- pfSense, which itself is a fork of the
based OS has it now (sadly) defunct m0n0wall, built
all: a slick setup, on the FreeBSD operating system.
clear UI and We’ve delved into OPNSense’s
advanced lineage as FreeBSD places a strong
features far emphasis on security, such as
beyond your ACLs (access control lists), MAC
basic firewall. (mandatory access control) and
support for OpenSSH. Like Use the UI to set firewall rules. OPNSense also supports other features, such as VPN, and it can
FreeBSD, OPNSense also has an be expanded further with extensions.
SPECS integrated mechanism to handle
CPU: 1GHz automatic updates. image of the OS, an integrated GeoIP database, as well
dual-core Unlike FreeBSD, which can be run on virtually any as a discount on business subscriptions.
Mem: 2GB chipset known to man, the only official build for Just spending a few minutes setting up OPNSense
HDD: 8GB OPNSense is for x86_64. This is balanced by an easy and creating some basic LAN rules is enough to see
Builds: x86_64 installer, available in the traditional ISO format, as well why it remains one of the most popular firewall distros.
as VGA, serial and nano images for USB sticks. Our The user interface is very intuitive and well laid out.
installer was just 413MB, expanding to a 1.6GB ISO. There are three main support tiers, from Critical to
Community. Community users are well served by the
Guess the password documentation section, though paid subscribers also
On first launch, you can choose to run in live mode as benefit from support from the OPNSense core team.
root or as installer. This is where we hit our first issue, If this weren’t enough, the team bundles an ebook,
as we were encouraged to use the default password, Practical OPNSense, free with business subscriptions.
without any mention of what it is. Luckily, OPNSense’s (Hard copies are available for more tactile firewall
extensive online documentation came to the rescue, users.) The manual gives a full rundown of OPNSense’s
revealing the password to be opnsense. more advanced features, such as intrusion prevention,
After this, it was a simple matter of choosing a app control, web filtering and malware detection.
keymap, install configuration and hard disk, before Having criticised OPNSense’s lack of availability for
setup was underway. Once complete, just navigate to non-X86 devices, said documentation has instructions
192.168.1.1 to interact with your shiny new firewall. on how to build the OS for your own chipset using
We say “firewall” but OPNSense is capable of much OPNSense Tools (https://github.com/opnsense/tools).
more than blocking traffic. Inline intrusion prevention is The forum has multiple accounts of users successfully
provided care of Suricata and Proofpoint’s Emerging running the OS on their Pi but if you want to use it in a
Threats open rules, which are built in to the OS. Its web serious way, we recommend sticking to bare metal.
proxy offers access control and support for external
blacklists to filter unwanted traffic. Other options
include firewall aliases and DNS blacklisting.
VERDICT
OPNSense also integrates support for OpenVPN, as DEVELOPER: Deciso
well as WireGuard. You can log in to user-created VPNs WEB: https://opnsense.org
via 2FA, as well as the user interface itself. LICENCE: Simplified BSD/FreeBSD
You can expand the OS’s capabilities even further
via plugins such as ZenArmor, which has a built-in FEATURES 9/10 EASE OF USE 9/10
threat intelligence system. There’s both a free and a PERFORMANCE 10/10 DOCUMENTATION 10/10
paid version.
OPNSense itself is released under a FreeBSD OPNSense is the last word in firewalls. Setup is simple and it
licence but developer Deciso also sells a Business can be easily managed from the intuitive UI.
Edition of the latest version of the OS (code-named
Restless Roadrunner). This includes extra features Rating 9.5/10
such as a commercial firmware repository, an OVA

www.techradar.com/pro/linux October 2023 LXF307 23


REVIEWS Linux distribution

Rhino Linux 2023.1


Nate Drake takes a ride on the Rhino, exploring the rich Unicorn desktop,
as well as the pleasures and perils of rolling releases.
hey say that Rome wasn’t
IN BRIEF
Rhino Linux
T built in a day and the same
is true for Rhino Linux. The
is a worthy project went through five betas
successor to its before its official release in August.
predecessor, If the name sounds familiar, it
providing an may be because lead developer
amazing Xfce- AJ Strong worked on Rolling Rhino
based desktop Remix – a utility to convert Ubuntu
incorporating into a rolling release Linux distro by
the latest tracking the devel packages.
Ubuntu code. If While Rhino Remix reached end
you can handle of life last October, Rhino Linux has
potential picked up the cudgels and also
instability, take follows a rolling release model
the Rhino by using the Ubuntu devel repos. Use the search bar to track down files and programs. Launch via the U icon on the desktop’s left.
the horn. As it is a rolling distro, the team
also made the decision to use the Pacstall package launch bar on the left of the screen. This even helpfully
manager, which allows users to install packages from tucks itself away when you maximise a window.
SPECS the Arch User Repository (AUR). The developers claim Even if you’re a fan of Xfce, you should take the time
CPU: 1.5GHz this allows updates to be delivered faster. to open the Gnome-inspired app grid. You’ll find some
dual-core If an AUR-inspired package manager weren’t familiar default applications, including the Thunar file
Mem: 2GB enough, the OS also includes Rhino-pgk, a meta- manager, Mousepad and the Xterm terminal utility.
HDD: 20GB package manager written in Bash, which combines The team at Rhino has also created some custom
Builds: x86_64, Apt, Pacstall, Flatpak and Snap into a compact UI. It tools of its own. Try clicking the U to launch the search
aarch64 can be used to install, remove, search and upgrade bar. It has a similar function to KDE Plasma’s KRunner
all package managers at once by running commands but seems to integrate better with the desktop itself,
such as rhino-pkg update . similar to Mac OS’s Spotlight.
And if this weren’t bleeding-edge enough, Rhino Other exciting home-made features include
also comes with its own customised version of the RhinoDrop. This is touted as an open source alternative
Xfce 4.18 desktop, code-named Unicorn. to Apple’s AirDrop, to allow file sharing between
You can take Unicorn for a ride by testing Rhino in devices. Currently, the tool is accessible only via
live mode, just as for stock Ubuntu. (Indeed, the boot https://drop.rhinolinux.org but the Rhino Team has
screen still says ‘Xubuntu 23.04’, revealing its roots.) confirmed there are plans in the works for a GTK4 port.
The desktop is extremely colourful and slick. The If you press ahead with installation, you’ll find this is
developers claim to have been inspired by Gnome in no different from traditional Debian or Ubuntu setups,
creating Unicorn, which is obvious from the plank given it’s done through Calamares. This means Rhino

ROLLING RHINO REMIX


Rolling Rhino Remix was the having to upgrade their OS Canonical, who told him doesn’t make exclusive use
brainchild of Rhino Linux every six months. about a potential new project of Snap packages.
developer AJ Strong, also AJ modestly claims he to have a rolling release Rhino also sets itself apart
known as http.llamaz and made Rolling Rhino Remix version of Ubuntu, which from traditional Ubuntu by
MrBeeBenson. It reached its with “little effort”. Still, it would have an LTS base, using the AUR Pacstall
end of life in October 2022. became an incredibly popular with the Linux kernel itself package manager. Writing as
It existed as an unofficial tool with the addition of being a Snap package. MrBeeBenson on Reddit in
Ubuntu flavour to convert scripts and utilities that Even if true, this wouldn’t August, AJ explained that the
the Ubuntu operating system made it progressively necessarily push distros OS will nevertheless continue
into a rolling release Linux more stable. like Rhino Linux out of the to be based on Ubuntu
distribution by tracking In a blog post, AJ also market. This is because instead of Arch Linux, given
the Ubuntu devel series. In referred to discussions he’d Rhino itself is based on the all the support the original
theory, this saves Ubuntu had with Ken Vandine, an latest Ubuntu development Rhino project had from the
users the time and trouble of engineering manager at branch, as well as the fact it development community.

24 LXF307 October 2023 www.linuxformat.com


Linux distribution REVIEWS

so-called Debian Sensible Browser. Email is provided


by the built-in Mail Reader.
As there’s no pre-installed office suite or dedicated
email program, we decided this was as good a time as
any to try out the Nala Apt package manager front-
end. It was a breeze to fire up Xterm and run sudo nala
install thunderbird . We then launched the app
immediately using Rhino’s integrated search bar.
Regular readers know how much stock we place
on good quality backgrounds, which is why we were
delighted to see that there are no fewer than 14 on
The integrated app drawer is a clear nod to Gnome. Use it to offer. Just as with the regular Xfce desktop, you can
explore the default applications. also switch between backgrounds at fixed intervals.
We also took this opportunity to experiment with
supports the same features as stock Ubuntu, including the workspace switcher and found it extremely easy to
encrypting the hard drive via LUKS and offering flick between different desktops.
alternative filesystems to ext4, such as Btrfs. Overall, Rhino Linux places you on the cutting edge
This is where we ran into issues, as the first Rhino of Ubuntu development without the hassle of creating
Linux ISO we downloaded failed to boot at all, citing an your own custom distro. It gives you the latest system
‘invalid DMI header’. The second ISO completed install,
but when booted, dropped to an initramfs console after
we entered the password for the LUKS partition.
We assume this is part and parcel of basing a distro
on the Ubuntu development repos, which keeps you on
the bleeding edge of system and app development
at the cost of system stability. It was only on our third
install attempt with the second ISO that we were able
to install Rhino successfully sans encryption.
Assuming your first install works, the OS launches
its Setup Wizard (another Rhino original), which first
asks you to choose a light or dark theme.
Next, it asks you to choose which package
managers to use, such as Flatpaks, Snaps and
AppImages. (By default only Flatpaks are enabled.)
The Extra Settings also enables Nala by default – a
very elegant Apt package manager front-end. From
here you can also enable GitHub CLI to interact with updates and apps versus other distros forked from Here at Linux
the website via the terminal and the Apport crash Ubuntu, like Zorin OS, which base themselves on the Format, we’re
suckers for a
reporting system. Reboot to apply your changes. most recent LTS (long term support) release. vibrant background.
This is also a good time to explore another of Naturally, the potential price you pay is similar to the Rhino offers you
Rhino’s home-grown apps, called Your System, created admonitions given by the Debian team for using the 14, which you can
by developer Axtloss. This handy utility gives you an unstable version of the distro Sid. Installation and switch between
automatically.
excellent rundown of vital system information, like your updates can go wrong. Packages may be broken. If you
board, CPU, available memory, disk space and so on. place your faith in an OS that is constantly updated, you
It’s here that we learned that this latest version of also need to ensure your backups are up to the minute.
Rhino Linux is based on version 6.4.8 of the Linux But this is true of every distro of this kind, and is not
kernel. This is also a good opportunity to explore the a specific criticism of Rhino Linux. If we were to nitpick,
app drawer a little further to view the default apps the wiki doesn’t offer much beyond basic installation
that don’t traditionally come bundled with Xfce, such instructions. No doubt this will be fleshed out as more
as the latest version of Firefox (116.0.x) and the people start using the latest stable version of Rhino.

VERDICT
DEVELOPER: Rhino Linux Team
WEB: https://rhinolinux.org
LICENCE: GPL-3.0

FEATURES 9/10 EASE OF USE 7/10


PERFORMANCE 7/10 DOCUMENTATION 5/10

Rhino Linux keeps you on the bleeding edge of development


with an incredibly rich and easy-to-navigate user interface.

Like every good desktop environment, Unicorn can quickly switch Rating 7/10
between workspaces. Don’t expect too much from the Rhino wiki, though.

www.techradar.com/pro/linux October 2023 LXF307 25


REVIEWS Adventure

Mask of the Rose


There’s an indescribable horror in the basement. Management just
employed it to do the accounting, and Joshua Wolens has to make it tea.
t’s hard to believe it’s
SPECS
Minimum
I taken Failbetter this long
to try its hand at a visual
OS: Ubuntu novel. The studio has always had
20.04+ 64-bit, the most engrossing, amusing
Arch Linux and evocative writing in the
CPU: 64-bit business, but it has an uncanny
Pentium class knack for hiding that writing
2GHz behind mechanics that wear on
Mem: 3GB our nerves. Between browser
GPU: OpenGL games and roguelikes, the studio’s
3.2+, Vulkan wit keeps ending up blunted by
HDD: 8GB repetitive gameplay loops. Only
Sunless Skies, so far, has
managed to strike a good balance.
So, it must feel like Failbetter
has finally found a perfect home Strike up interesting and unusual new friendships!
with the visual novel genre, right?
Well, kind of. While many of Mask of the Rose’s mark yourself as down for whatever on Victorian Tinder,
mechanics are interesting ideas, they often feel a touch the game regularly checks in about what kind of
underbaked, leaving us groping in the dark without a relationship you’re pursuing, if any, with each of the
full understanding of the decisions we’re making. characters, including the giant bat and the squid-man.
Up to now, every game set in fallen London has taken Your relationships, whether platonic, romantic,
place decades after the actual fall, but Mask of the Rose indifferent or hostile, with the game’s cast are the heart
sits squarely in 1862, kicking off 260 days after bats of Mask of the Rose, so it’s a good job they’re rewarding
blackened the sky and absconded with the capital of the to pursue. So soon after London’s fall, all sorts of
British Empire. This is where, and when, you find yourself. histories and identities are bumping up against each
Precisely who ‘you’ are in Mask of the Rose is open other in the city’s shifting streets. Men and women,
to elastic definition. Your background and gender are all high-born and low-born, Jewish, Hindu and Christian
pleasantly fluid. Plus, it might call itself a dating sim, but all rattle around trying to find stations for themselves
you can make it clear from the off just what kind of in a new world, even as otherworldly newcomers start
relationships you’re open to. You can keep everything making appearances.
platonic, or physical but not romantic, or swing the doors It’s richly textured and a pleasure to delve into, but
wide open to anything that comes your way. You can, if your ability to do so is constrained by how limited your
you like, only involve yourself in romance by playing time is in Mask of the Rose’s London. You’re constantly
matchmaker, or breaker, with the rest of the game’s cast. making choices – and every choice takes time – as the
Create your own It’s admirably open-ended, and should give anyone game progresses. Even the clothes you wear to an
story narratives. room to play without feeling uncomfortable. Even if you encounter can alter how people react to you and the
dialogue options you have during it, and
Failbetter clearly wants you to go through
them again and again to see the impacts
your choices can have.
You can get through a full run of the
game in three or four hours, but it means
you leave plot threads dangling and lots of
relationships at a halfway point when you
hit credits. Even going through with a new
character background and some different
choices, we ended up feeling like we were
repeating certain sections of the game to
get back to where we were previously.
Take, for example, what you can
probably describe as Mask of the Rose’s
main plot. Much like real life, the game is
part dating sim, part murder mystery, and a
significant part of the game’s midsection is

26 LXF307 October 2023 www.linuxformat.com


Adventure REVIEWS

taken up by trying to prove your friend


has been falsely accused of murder (don’t
worry, the victim got better).
Our first time through, unaware of
how little time we had, we accidentally
left our friend to hang because we got
distracted pursuing various other
plotlines: fomenting revolution, taking
London’s census, trying to woo someone
attractive even though they’re definitely a
Tory. The second? We tried to balance
our responsibilities and left them all half-
finished. The third time through, we
focused and finally managed to assemble
one of many possible cases for why our
boy was innocent.
The third time through was the most
satisfying, narratively, even if we’re
execrable Phoenix Wrights, but it felt like
we had to laser in on the murder case at the expense of construct our hypothesis, but sometimes a chat wouldn’t Achieve goals and
everything else the game had to offer. We could have yield any new storycrafting material at all, even when we pay your rent.
ignored it, like we accidentally did the first time, but it felt like it should. Sometimes we would go to speak with
feels a tad strange to leave our amiable Scottish chum someone only for the conversation to digress down
to the gibbet’s whims because we’re too busy trying to some side channel that meant we never got a chance to
help a different friend with their writer’s block. discuss what we wanted to talk about at all. With time so
precious and the game constantly autosaving, we never
Narrative Lego wanted to waste time pursuing a lead unless we were
We assemble our case using Mask of the Rose’s almost certain it would give us something we could use.
storycrafting system, the jewel in its mechanical crown. Amusingly, this meant we ended up pursuing
It’s essentially a kind of Mad Libs that asks us to pick a someone we were almost certain didn’t do the crime,
protagonist, a motive and an action from a list (we get but who we nevertheless thought the jury would find
new ones by deepening our relationships with the guilty and would give us lots of storycrafting material
game’s different characters) to craft narrative solutions to make a case with. Perhaps that’s a wry commentary
for various puzzles. on something…
So, for instance, the storycrafting section for the Failbetter’s London is a treat to engage with as ever,
murder case required us to pick a culprit, their motive but between the time pressure, the repetition and the
and how they did it, plus some other stuff, and if we foibles of its storycrafting system, the game holding it up
picked ones that made sense, we got a new theory in our in Mask of the Rose never really coheres properly. It feels
arsenal that we could go and harangue people about to a little like a first draft, the prelude to an excellent sequel
further our investigation. that will come out in a few years with the kinks ironed out
In theory, it’s great, and lord knows it fits impeccably and an easier-to-grasp set of mechanics. It feels like
well with the themes of Failbetter’s London and its entire Sunless Sea, basically.
vibe as a studio, but more often than not we found We still enjoyed our time with it, mind you, just like
ourselves thwarted trying to use it. Either we’d input a we did with Sunless Sea. For anyone who likes this
narrative that we thought made sense but that didn’t world as much as we do, Mask of the Rose is an easy
give us a new story to go and talk to people about, or recommendation, while its brevity and placement so
we wouldn’t quite have the building blocks necessary to early in the series’s timeline makes it a pretty good place
construct the theory we had in our actual, real-life head. for newcomers to dip their toes in, too. As it is, though,
Certainly, we could go and chat to the relevant people, Mask of the Rose feels like a foundation for something
hoping the conversation gave us what we needed to great, but not quite great itself.

VERDICT
DEVELOPER: Failbetter Games
WEB: www.failbettergames.com
PRICE: £16.75

GAMEPLAY 7/10 LONGEVITY 7/10


GRAPHICS 7/10 VALUE 8/10

Mask of the Rose’s writing and characters shine, but the


game underneath them never fully gels together.

Rating 7/10
Reconnect with siblings over their poor taste in suitors!

www.techradar.com/pro/linux October 2023 LXF307 27


ROUNDUP Personal
WE COMPARE TONScloud serversSO YOU DON’T HAVE TO!
OF STUFF

Michael Reed
sometimes has

Nextcloud Pydio Cells Filestash his head in the


clouds, but on
Seafile OwnCloud this occasion, we
needed that area
of his expertise.

Personal cloud servers


Michael Reed compares five open source personal cloud servers to find
out if they’re really free, what it takes to install them and what they can do.

HOW WE TESTED…

We installed each of the


systems on to a standard
Ubuntu setup within a
virtual machine. We could
have installed each of the
servers on to a single
machine, but the problem
with doing that is you lose
sight of what configuration
accommodations you had to
make. When problems crop
up, it’s sometimes difficult to
determine which components
caused them when dealing
with a crowded setup.
Most of the systems
supported a variety of
installation methods, and in
each case, we chose the one
that seemed the easiest to
work with and configure.
While installing the free
version of the system, we his month we’re comparing five self- systems, Nextcloud, started life (in 2016) as
tried to figure out exactly
what features were missing
T hosted cloud servers. These are
systems that run on top of a Linux
a fork of OwnCloud. Both of these systems
can do a heck of a lot and can also be
in cases where there were installation and provide file-sharing facilities customised quite a bit thanks to their
also paid options. to your local network and the outside world respective add-on ecosystems.
We copied a small media via the internet. Most also provide extra Filestash was created to do one thing
library to each system and facilities such as media libraries and remote well: work as a network file-sharing program
Image credit: Getty Images

then tested the file document editing. The use case we’re with a web interface. To this end, it’s fairly
synchronisation facilities considering is setting up a web-enabled easy to set up and use. Pydio Cells has a
between it and a desktop cloud server that can be shared with family similar purpose, but it also contains a lot of
machine. We also tried to members or colleagues rather than setting group collaboration facilities. Seafile has a
connect to each cloud system up a business file server. business-like appearance but it contains
using its own mobile app. OwnCloud is one of the best-known all the facilities you would want for file
systems in this area, and one of the other management within your personal cloud.

28 LXF307 October 2023 www.linuxformat.com


Personal cloud servers ROUNDUP

Obtaining and With Pydio


Cells, you can
download it, set

installing
up the MySQL
database and
then run the
executable

We want to see a variety of from the


command
installation types suitable for line, although
the free and
different scenarios. enterprise
versions
do differ.
e used the (still maintained) 10.x version of OwnCloud

W because we felt the rewrite, called Infinite Scale, hasn’t


caught up in terms of the ecosystem of compatible level as a WordPress manual installation in difficulty. Overall,
apps yet. Because 10.x is tied to PHP 7, rather than PHP 8, it can most of the installation options were straightforward .
be a difficult manual install, so we installed the Docker version. Seafile offers a Docker image, which is the option we chose.
The website offers a full range of distribution-orientated This means installing Docker Compose into Ubuntu, downloading
packages and VM images for most virtualisers as well as Docker a YAML script, making a few alterations, and then running a
images, but there was no mention of a Raspberry Pi version on command. Overall, it was a simple job. There were also options
the download page (however, it can be installed unofficially). for a partially automated manual install or instructions for a
Nextcloud offers an installer script that can be used if you completely manual installation, which would leave you with a
already have a full LAMP (Linux, Apache, MySQL, PHP) server fairly traditional setup based around MariaDB and Nginx/Apache.
installed and configured, and there is a ready-made VirtualBox Filestash only provides instructions for a Docker installation,
image and an official Docker image. We decided to install via which consists of downloading a YAML configuration file, making
Snap, an easy option for Ubuntu users that works on the changes to it, then running the Docker Compose command. It’s
Raspberry Pi, too. Although easy to set up, Snap has the slight one of the easier installations here but also the least flexible.
downside that you have to do a bit of searching around to find
the location of storage and configuration resources. VERDICT
Pydio Cells ships as a self-contained binary with a built-in web
server. The installation options are well documented and include NEXTCLOUD 8/10 SEAFILE 7/10
appliances and virtual images such as Docker, VMWare and a PYDIO CELLS 7/10 OWNCLOUD 7/10
universal OVF image along with full Raspberry Pi documentation. FILESTASH 5/10
We chose to install manually. This did require a manual OwnCloud is at an awkward development stage, while Pydio Cells offers a
installation of MariaDB database that was on about the same good range of options and is easy to work with.

Installable apps
Some systems can do more than
just file share and can be expanded.
y default, Nextcloud has some apps already configured,
B such as a photo manager with basic editing and
slideshow capabilities. There are also email, calendar and
contacts apps, and a note-taking app that integrates with an app
for mobile devices. Beyond that, there is an excellent marketplace
with apps that cover pretty much every area of functionality you’d Nextcloud has some apps built in (but their installation can be skipped the first time
expect, along with some niche areas such as GPX viewers for you log in), and the marketplace is packed with both substantial and niche apps.
visualising outdoor activity data. Overall, it’s an excellent system.
With OwnCloud, some of its functionality is provided by apps architectures. As with most systems of this type, much of the GUI
behind the scenes, but it doesn’t ship with any extras configured. functionality is provided by plugins behind the scenes. In Pydio
Thankfully, it has a built-in, categorised marketplace with ratings. Cells, there are a few of these that are disabled by default, such
It doesn’t have as many apps as Nextcloud, particularly if we’re as an HTML editor and an audio/video capture one.
talking about the type that a home user is likely to want, but it’s
still a good selection. It’s also worth considering the fact that VERDICT
OwnCloud is undergoing a transition right now, introducing some
uncertainty to the apps ecosystem, at least for the moment. NEXTCLOUD 9/10 SEAFILE N/A
The Seafile developers have stated that they don’t want to PYDIO CELLS 5/10 OWNCLOUD 7/10
add a plugin or app architecture for security and performance FILESTASH 4/10
reasons, as well as not wanting to dedicate development Nextcloud is the winner here, with OwnCloud not far behind. The others were
resources to it. Pydio Cells and Filestash, however, do have plugin underwhelming, but keeping things simple has its own merit.

www.techradar.com/pro/linux October 2023 LXF307 29


ROUNDUP Personal cloud servers

The user interface


You’ll see it every day,
so it has to be good. Nextcloud 8/10 Pydio Cells 8/10
By default, Nextcloud has quite a lot of Pydio Cells emphasises file sharing and
e are mainly interested facilities configured and ready to go, and it group collaboration, yet the user interface

W in the file-management
facilities of these systems.
does a good job of presenting it all with a
clean and bright interface. Small icons run
is rather pleasant to look at. When you
first log in, you are taken to a summary
To a degree, we expect a user along the top of the window and these page of recent files and directories, but
interface that places a slightly give access to apps, such as the calendar the starting point is configurable on a per
different emphasis on layout and email, along with the user and admin account basis. Users can also select
from that of a file manager for configuration editors. Within here, there between a light and dark theme.
a desktop operating system. are some good light and dark themes. On the right is an icon bar with links to
Typically, one wouldn’t expect to File management is good, with a the home directory and bookmarked
carry out the same sort of detailed multiple-select box as part of each icon locations. Once you’re deeper into the
file management when working and a right-click menu. Oddly, there is a directory structure, things take on a more
with files in the cloud; however, we file upload icon, but this can’t handle full business-like look, without being drab.
do expect to be able to carry out the directories. This oversight is partially The user interface implements a right-
standard operations such as copying, compensated for because you can drag click menu, which is good to see. It’s
moving and deleting without too and drop files and directories from the file always a subjective take, but the user
much difficulty. manager of your operating system. interface feels fast compared to the
The majority of file management There weren’t any speed problems others, no doubt because this is a self-
in the cloud tends to consist of file as such, but Nextcloud didn’t feel quite as contained system rather than a system
browsing. To this end, we appreciate fast as systems such as Pydio Cells and that runs inside a web server. Looks-wise,
views such as one showing the Filestash, particularly when moving from it strikes a good compromise between
recently added files. Large one area of the system to another. being functional but also colourful.
thumbnails are also appreciated,
along with easy access to favourite
folders. Pop-up context menus are
always nice, as simple operations
shouldn’t be overly complicated
compared to carrying them out on a
desktop computer. Browsing should
be fast, with minimal delays and an
aesthetic that is pleasant to look at.

Mobile apps
You probably want to be able to access your files while on the move.
eafile has a simple app that’s available for Android and Pydio Cells also offers a basic file browser for Android and

S iOS. You can either enter the URL of your server (which
can be an IP address) along with your username and
iOS, but we were unable to test it because we couldn’t quite
produce the authentication certificate it required and the option
password, or enter the details of professional hosting if you to ignore the security issue didn’t work.
have paid for that. Once it’s running, you can browse your files, OwnCloud also has a mobile app, and as with the others, it
download them and launch media files. It worked fine with the allows browsing and launching of files. The sharing options were
image and video files that we tested it with. limited to a publicly available HTTP link, however, rather than to
The files are presented in list format with icon previews any other services, such as social media, available on the device.
alongside some file details. In many ways, the simplicity and Filestash doesn’t have a mobile app, but you can, of course,
functionality reminded us of Seafile itself, and it’s well suited to browse to the web interface on a mobile device.
mobile use. A corner hold-down button gives access to further
options, including the ability to share. The share options seemed VERDICT
to include all of the registered services on the device (such as
social media platforms) or a pasteable HTTP link. NEXTCLOUD 8/10 SEAFILE 7/10
The Nextcloud app works in much the same way, but it can PYDIO CELLS 5/10 OWNCLOUD 7/10
also switch to an icon palette mode as well as the default details FILESTASH N/A
list view. As is the case with Seafile, it supports dozens of The mobile apps weren’t massively different from each other, but Nextcloud
platforms when making files publicly available. had the most features.

30 LXF307 October 2023 www.linuxformat.com


Personal cloud servers ROUNDUP

Filestash 6/10 Seafile 6/10 OwnCloud 6/10


Filestash is a system designed to do one Seafile has an understated appearance The OwnCloud UI keeps things simple
thing really well, and this is reflected in the that looks like something geared toward to the point of being a bit plain, but it’s
user interface. Files and directories are an office setting rather than a home one. fully functional. We prefer to see a right-
represented by largish icons in the middle There’s nothing wrong with the way it click menu in interfaces like this, but the
of the screen. It’s a simple interface that looks, though, and it is fully featured and OwnCloud Files module doesn’t have
reduces the chance of making mistakes. has the all-important right-click menu that one. From the three-dot menu you can
There’s a multiple-select icon visible on saves time when managing files. Along download, delete and publicly share
hover, and we liked the little icon for the top there’s a set of icons for switching the file. This is also where you enable the
quickly creating an externally visible link. between different file layout modes, and details view that has a larger thumbnail of
If you do a lot of file management, in the top-right there is an icon for the media files and a tab that enables you to
however, you might find that this bare- user and admin configuration pages. examine the history of the file.
bones interface is a bit awkward to deal There don’t seem to be any easy The main bar along the top has the
with. There isn’t a right-click menu at all, theming features, which may be taking search pop-up and the link to the admin
and operations such as copying files the overall policy of the project to limit menu. There is an icon in the top-left
involve extra steps and can feel unwieldy if customisation too far. Throughout, the that gives access to installed plugins.
you have to do a lot of it. You have to take speed was good. There’s nothing wrong There is a quick-access sidebar that
into account that the system itself doesn’t with the way Seafile looks and it certainly covers the basics such as favourite files
have a lot of scope for expansion and works as it should. Some users will like the and directories on the right-hand side.
customisation. If you just want to point business-like minimalism of the interface, Overall, it’s a user interface that covers
and click on files to browse them, with but as we’re assessing the system from the basics but lacks panache or detailed
occasional file-management duties, the perspective of a typical home user, we features compared to Nextcloud or even
Filestash might be all that you need. consider it a little drab-looking. the fairly minimalist Pydio Cells interface.

File synchronisation
Automatic duplication of a folder on your computer to your cloud.
he Nextcloud website provides a desktop client synchronised because the filename was not understood. Seafile

T application file synchronisation tool as an AppImage


package. This is implemented as a Qt app, and it lives as
also provides an optional command-line tool to manage
synchronisation, and this might suit some workflows and
a green tick icon in the status panel area of your desktop. Once scenarios better.
you’ve added a folder from your computer for synchronisation, The Pydio Cells synchronisation tool consists simply of a
any changes to files in that folder are sent to your Nextcloud single executable file that can download from the website and
server. The other clients all worked in a similar way. run from the home folder. Synchronisation involves creating a
For the OwnCloud file sync, we chose the AppImage rather task, which was a bit more complicated than the other clients.
than adding the official repository. Once running, it worked in As with its lack of mobile app, Filestash does not have its own
the expected way. For example, we added a folder containing desktop client or file sync tool.
around 320 PNG files that totalled 150MB and these were sent
over the network in about 15 seconds. We didn’t encounter any VERDICT
performance problems with any of the clients, for that matter.
The Seafile desktop client performs a similar function NEXTCLOUD 8/10 SEAFILE 8/10
to the others here, but it also implements rudimentary file PYDIO CELLS 8/10 OWNCLOUD 8/10
browsing. Drag and drop can be used to add folders, which is FILESTASH N/A
a plus. One problem we encountered when we dragged in a The desktop clients all worked in a similar way. Seafile’s additional command-
folder of odd PNG files is that some of the files could not be line client is handy.

www.techradar.com/pro/linux October 2023 LXF307 31


ROUNDUP Personal cloud servers

Storage back-ends
Flexibility in terms of where you
store your file data is a boon.
t’s worth noting that Linux symlinks and network

I mounts can enable remote storage in cases where the


cloud server can support local file storage but not a
desired storage option. However, if not officially supported,
performance may not be ideal.
Filestash supports a wide range of storage back-ends, and it’s Filestash supports a variety of back-ends that can be configured via a simple admin
easy to add new resources via the admin interface. STFP (part interface. Once added, these storage resources are the first thing you see on login.
of SSH) is the recommended back-end for local file storage, for
example. As you might imagine, if you want to access proprietary however, offer Open Cloud Mesh (OCM), a standard for sharing
services such as Google Drive and Dropbox, various measures storage between different cloud systems, and comes with
have to be taken to obtain a security key. The days of simply instructions to use this to share file data between other Seafile
employing a username and password for such things are sadly and Nextcloud servers.
gone. Once these have been added, they appear when you log in. Pydio Cells can create new storage areas on the local file
OwnCloud supports Google Drive, Samba SFTP and WebDAV system or an Amazon S3 server.
for storage in addition to local file storage and other OwnCloud
servers – a good, if basic, selection. VERDICT
Nextcloud has seven options that include SFTP, local storage
or even another Nextcloud server. There are some extra steps if NEXTCLOUD 7/10 SEAFILE 5/10
you want to add Samba support to the setup, and there is an PYDIO CELLS 5/10 OWNCLOUD 7/10
option to allow users to mount external storage. FILESTASH 9/10
Seafile only offers the full range of storage back-ends in its Filestash supported the greatest number of storage back-ends and it had a
Professional edition, which we are not looking at here. It does, simple interface for connecting to them.

Freemium vs free
Does the enterprise version offer
vital features not in the free one?
ithin moments of visiting the OwnCloud website you’re

W hit over the head with information about paid enterprise


solutions. Extra features include things like a branding
tool, LDAP, enhanced Microsoft Teams and Office Online Server
support, along with fine-grained enhancements. We couldn’t see
much that users outside the enterprise world would want.
The Nextcloud website doesn’t offer a simple feature This is the first thing you see when you log into the settings dashboard of Pydio
comparison or price list. As with OwnCloud, it is sometimes Cells. The load monitor graphs are greyed out as this is an Enterprise feature.
difficult to be absolutely clear about what features are included
in the enterprise edition. For example, monitoring is mentioned, Enterprise feature. The basic functionality is complete in the free
but the free version also has real-time monitoring, which seems version but you can feel you’re a victim of feature trim.
to be the same as the screenshot on the enterprise page. In Filestash offers two paid tiers. The Pro tier releases you from
fairness, most of the features with the paid version are things the obligations of the open source licence, such as sharing code
like 24/7 tech support, early access to security patches, Outlook modifications, and offers branding features and email support.
integration and other features of interest to business users. Enterprise offers phone support and distribution-specific
The free version of Pydio is called Cells Home, and there are installation options. Our take was that the average home user
two paid tiers called Cells Connect and Cells Enterprise. In both, would get everything they need from the free version.
the pricing puts them out of reach of typical home users and the
added features, such as branding options and LDAP and SSO VERDICT
capability, would mainly appeal to business users. However, it’s
worth perusing the list (https://pydio.com/en/pricing) as there NEXTCLOUD 8/10 SEAFILE 7/10
might be something you were relying on that’s omitted, such as PYDIO CELLS 7/10 OWNCLOUD 8/10
the VMWare image or fine-grained role-based access control. As FILESTASH 7/10
soon as we logged into the settings dashboard, we noticed that None of the free versions of these systems were severely hampered,
the usage graphs were greyed out, with a note that they are an particularly for typical home users.

32 LXF307 October 2023 www.linuxformat.com


Personal cloud servers ROUNDUP

The verdict
Personal cloud servers
e’ve decided to make Nextcloud the winner of this

W Roundup. It’s open source software with a lot of


flexibility to it, starting from the full complement
of installation options and extending to the massive
selection of add-on applications. These apps cater for
practically every type of cloud sharing, including some
niche applications, and there is usually more than one
choice of app for a given task.
The user interface keeps things clear and simple while
packing in quite a lot of features. Speaking of features,
the free edition of Nextcloud isn’t that far behind the
enterprise version, and most of the extra features in the
paid versions are genuinely things that only corporate
users would be interested in. The mobile app does a good 1st Nextcloud 9/10
job of keeping you connected to your files while on the
move, and the desktop client is a GUI app that handles file Web: https://nextcloud.com Licence: GNU AGPLv3
synchronisation well. Version: 26.0.3snap1
OwnCloud is a big, powerful system with a lot of Easy to use and offers a lot of expansion potential through its apps.
options for expansion, but the project itself is in a period
of transition. The 10.x series is still a good system that is 2nd OwnCloud 7/10
worth considering, but its lifespan is limited because it
hasn’t been updated to support PHP 8. As it stands, it Web: https://owncloud.com Licence: GNU AGPLv3
still has a lot to offer, and it was second only to Nextcloud Version: 10.12.2 (stable)
when it came to expandability through adding apps. A powerful and expandable system, with a decent user interface.
Seafile is designed for file sharing and group
collaboration in the corporate environment. This meant 3rd Seafile 6/10
that we couldn’t touch upon some of its finer features on
this occasion, but it’s a fast, easy-to-set-up cloud file- Web: www.seafile.com/en/home Licence: GPL v2
sharing system. However, its looks are pragmatic and Version: 10.0.1 Community Edition
understated, and it doesn’t have much room for expansion. No-nonsense file sharing with a no-frills UI.
Filestash does one thing really well: it is a web front-end
to storage resources that is quick and easy to install. We 4th Filestash 6/10
were impressed with its large selection of storage back-
ends, meaning that you’d be hard pressed to find a storage Web: www.filestash.app Licence: AGPL v3
system that it couldn’t sit on top of. On the other hand, it Version: Docker latest image (2023-07-28)
doesn’t offer much in the way of expansion beyond its Does one thing very well – it’s a great cloud storage front-end.
basic design, and the stripped-down user interface might
work against it if your needs are more complex. 5th Pydio Cells 6/10
Pydio Cells has a fast, attractive-looking user interface.
However, it’s not particularly expandable, even though it Web: https://pydio.com Licence: AGPL v3
does have a plugin system. We noticed a few omissions Version: 4.2.5
from the free edition compared to the paid versions. Fast and pleasant to set up and use.

ALSO CONSIDER
Installing OwnCloud raises the question potential to offer superior performance potentially a simplified way to set up a
of whether to install the classic 10.x and simpler installation. We ran it and it computer as a dedicated cloud server.
version or the new Infinite Scale edition. seems to be a fully working system, but Sandstorm.io is a do-everything
Infinite Scale is a from-the-ground-up it doesn’t yet have all the features or the solution in the same vein as Nextcloud
reimplementation that was released app compatibility of the older version. or OwnCloud that has a lot of apps in its
towards the end of last year. As it is an YunoHost (https://yunohost.org) is a marketplace. You can go to the website
executable coded in Go and contains standalone Debian-based distro that (https://sandstorm.io) to try out a live
its own web server code, it has the you install like any other distro. This is demo to get a feel for what it offers.

www.techradar.com/pro/linux October 2023 LXF307 33


A.I. Pi projects

..
Tam Hanna has followed the Raspberry Pi since the first
revision, and puts the RPi 4 to work on amusing AI tasks.
rtificial intelligence payloads are common, you can also look forward artificial intelligence works in principle

A are commonly associated with


high-power systems that cost
a fortune. This, however, is a
to some more advanced tasks that you
would usually expect to require larger
workstations. Finally, we will also move
often saves a lot of time when it comes to
deploying the Azure AI service du jour.
In addition, experimenting with
misleading impression – a (relatively) our llama.cpp implementation to a 4GB payloads and the provisioning of the
cheap Raspberry Pi and a few simple version of the Raspberry Pi 4. Raspberry Pi operating system enhances
peripheral devices are all you need to take Creating custom and home-built AI your understanding of the system as
CREDIT: Magictorch

your first steps into the fascinating realm systems using Python is not only lots of whole. We will, for example, take a look at
of artificial intelligence. fun, but it also gives you some basic the swap memory system and the new-ish
The following pages demonstrate a experience of workflow, which can often libcamera2 API – knowledge that can
wide variety of possibilities – while some also be applied to advanced, cloud- and will also be useful for other, more
tasks, such as the recognition of faces, sourced AI systems. Knowing how mundane, everyday computing.

34 LXF307 October 2023 www.linuxformat.com


A.I. Pi projects

Smart hardware choices


With great ecosystem diversity comes a great amount of choice.

ong gone are the halcyon days when the the history of process computing.

L Raspberry Pi platform consisted of just one or


two models. We are using the Raspberry Pi 4
While it managed to greatly reduce
costs, it also introduced the
due to the availability of the Neon ISA, but that is just developership to the concept of
one of the necessary considerations. insufficient power supply.
Image processing is one of the lowest hanging fruit Given that AI payloads are highly
known to AI developers, so obviously a camera module demanding in terms of compute
is required – the problem with that is the availability of power needed, a high-quality power
multiple different candidates waiting to fill the gap. supply is crucial – we are using a
We are using the Camera 2 module we purchased USB wall wart that came with the
some time ago – while it lacks autofocus and might not purchase of a Planet Computers
be the most cutting-edge offering, the image quality (in Cosmo Communicator.
well-lit areas) is more than enough for our needs. Keep Internet connectivity is
in mind that AI algorithms can usually cope very well accomplished via a LAN input,
with bad image quality. which is connected to our gigabit internet service. He (or she) who
A 3D-printed stand (shown right) will be used to Finally, a memory card is required to provide the has a Raspberry
Pi camera should
house the camera module – the STL files required operating system – in the interest of making most also have a
to print it can be found at www.thingiverse.com/ compute performance available, we are sticking to a Raspberry Pi
thing:262061. The actual 3D printing can be done with 64-bit version of the Raspberry Pi OS. In particular, camera stand.
the cheapest filaments and any random nail picked up we are using the file 2023-05-03-raspios-bullseye-
at the home improvement store of choice. arm64.img – deploy it to the memory card as you
Recording audio is another interesting application would deploy any other operating system intended
that often fails spectacularly due to the insufficient for use on a Raspberry Pi.
quality of the microphones used by would-be As for compute access, we are mainly using
experimenters. We are long-term users of Lernout & SSH. However, connecting an HDMI monitor to the
Hauspie’s Dragon software, which uses the C-Media computer makes work easier and is required for the
Electronics Anua Mic CM 900 USB microphone as the camera payload’s efficient functioning and usability.
preferred data input. It, or one of its many successors,
can easily be purchased for about £70 on Amazon. For
a stand, we tend to use a high-tech mug (shown below). NEON INSTRUCTIONS ARE HELPFUL
As for external storage, we can – in theory – make
do with a 128GB microSD card. Given that these are Cryptocurrency mining was one of the first times when dedicated
kind of pricey, however, a different approach is taken in instruction set architectures outshone their (more flexible) general-
the section looking at the LLAMA chatbot (page 40). purpose-compute peers. The proliferation of GPU-based mining
rendered CPU-based mining obsolete; ASIC and FPGA-based
Bits and baubles mining then put GPUs out to pasture in the bitcoin production field.
Eben Upton’s decision to use a stock mobile phone In the case of AI tasks, a similar design pattern can be seen. Given
charger as the power supply for the Raspberry Pi that our single-board computer is not the fastest, having access to
family is one of the most double-edged decisions in dedicated and advanced instruction sets optimised for AI workloads
can make the difference between a workable and a laggy solution.
In the case of AI tasks, ARM’s Neon instruction set is commonly
used. Because of that, you’re advised to get your hands on the most
recent version of the Raspberry Pi possible. The steps here use a
Raspberry Pi 4 with 4GB of RAM; obviously, the (difficult to procure)
version with 8GB of RAM would lead to even better performance.
In theory, the Neon instruction set is also supported on the older
Raspberry Pi 3. In practice, the difference in compute performance
is significant, Linpack tests show the Pi 4 is up to 3.8x faster while
TensorFlow is anything between 50 and 100 percent faster.
If you’re interested in finding out more, you can do so via
the documentation provided by ARM. The document found at
https://developer.arm.com/Architectures/Neon provides a
theoretical overview of the ISA, while https://developer.arm.com/
documentation/102107/latest permits Python developers to take a
stab at Neon using a practical example.
An old mug doubles as a DIY microphone stand.

www.techradar.com/pro/linux October 2023 LXF307 35


A.I. Pi projects

Sounds like trouble


Recognising our northern accents will tax this poor Pi audio model.

e are using the project found at https://github. The deployment of the program might take a few

W com/petewarden/spchcat – it was quite a


sensation when it was released originally and
seconds; using the precompiled binary version is
preferable to a manual compile, as the vendor bundles
tends to work reliably. Voice recognition has since it with various language models. For a manual compile,
evolved, of course, but that does not mean that the the models need to be downloaded by hand.
product at hand is bad quality. The first thing we have Next, open a command-line window on the
to do involves downloading support libraries via the Raspberry Pi and enter the following command to start
following commands: deployment via the package manager:
$ sudo apt-get -qq install -y sox libsox-dev libpulse-dev $ sudo dpkg -i ~/Downloads/spchcat_0.0-2_armhf.deb
make gcc g++ wget curl libc6:armhf
$ sudo dpkg --add-architecture armhf DLL hell for Linux
$ sudo apt-get -qq install -y pulseaudio Serious users of Windows-based operating systems
The product ships as a precompiled binary, which is know the concept of DLL hell well – it refers to
only provided as a 32-bit file at the time of writing, so technical trouble caused by the presence of mutually
the invocation sudo dpkg --add-architecture armhf is incompatible dynamic link libraries on one workstation.
required. This informs our 64-bit version of Raspberry In the case of our Raspberry Pi installation, perform a
Pi OS that it also needs to consider 32-bit binaries. dry run via the following command:
The deployment file, which is about 1GB, must $ spchcat
Given that some of be downloaded from GitHub. Our Pi experienced Should you have followed our advice, the program
the LXF team have significant hiccups when trying to obtain the file using execution fails with this error:
strong accents,
the transcription
Curl. Instead, open your browser and go to the GitHub spchcat: error while loading shared libraries:
results are repository URL. Look for the Latest .Deb Installer libpulse.so.0: cannot open shared object file:
pretty good. Package link and click it to start the download process. No such file or directory
This can be remedied by entering the following:
$ sudo apt-get -qq install -y libpulse-dev:armhf
libpulse-dev
$ sudo apt-get -qq install -y libsox-dev:armhf libsox-dev
In the interest of maximum compatibility, packages
are loaded in both the normal and suffixed version. This
way, the Raspberry Pi OS installation takes in both the
32-bit and 64-bit versions.
At this point, a reboot is required. After that, the
program can be tested. When launched, it shows a

THE EAR OF OPEN SOURCE


Just as in the case of many other AI The Mozilla team – best known for its only that, but the database found there
applications, maintaining and/or web browser – has, for some time, can also be used to train various other
providing high-quality recognition invested significant amounts of custom speech recognition models for
models tends to be one of the largest engineering resources into voice- fun and posterity.
problems in this field. In voice related tasks. One of the results of
recognition, the situation is especially this work can be found under the URL
difficult – not only should models https://commonvoice.mozilla.org/en –
accommodate the thousands of the Common Voice project contains
languages known, but in addition to voice samples that are uploaded by
that, people who speak a second volunteers using their browser and the
language with the accent of their first (hopefully high-quality) microphone
also need to be recognised. connected to their workstation.
While companies such as Lernout Our mention of the project is
& Hauspie solve this by making the not pure filler – should you want to
user read a few known sample texts help open source voice-recognition
and then using those samples for technology, providing a voice sample
parametrisation, the application used in is a fantastic and low-effort way to
our guide takes a different approach. achieve this commendable goal. Not A wide range of samples are available via Mozilla.

36 LXF307 October 2023 www.linuxformat.com


A.I. Pi projects

screen displaying a status message. As actual text is


input by voice, a display similar to the one shown (on import pyaudio
the left-hand page) crops up.
CHUNK = 1024
Take it apart! FORMAT = pyaudio.paInt16
Students of the history of voice recognition will CHANNELS = 1 if sys.platform == ‘darwin’ else 2
remember the problems of tokenisation. Careful RATE = 44100
observation of the behaviour of the program reveals RECORD_SECONDS = 5
something similar. Particularly when fed input from a
USB microphone, quite a bit of time passes before the with wave.open(‘output.wav’, ‘wb’) as wf:
output is stabilised. This is disadvantageous for all p = pyaudio.PyAudio()
application scenarios where the engine output is to be wf.setnchannels(CHANNELS)
recycled via another program. wf.setsampwidth(p.get_sample_size(FORMAT))
A first attempt would involve a simple pipe, as per wf.setframerate(RATE)
the invocation spchcat | cat . In theory, this program
should work well; in practice, sadly, it does not. The stream = p.open(format=FORMAT,
reason for this is that the utility often squirts out badly channels=CHANNELS, rate=RATE, input=True)
formatted text – in many cases, the final result of the
previous translation becomes available only after print(‘Recording...’)
the user has finished speaking the next sentence. for _ in range(0, RATE // CHUNK * RECORD_
As a first attempt to work around this, a Python SECONDS):
program such as the following might be appealing: wf.writeframes(stream.read(CHUNK))
import io print(‘Done’)
import subprocess
stream.close()
proc = subprocess.Popen([“spchcat”], p.terminate()
stdout=subprocess.PIPE) Running this version of the program reveals status
for line in io.TextIOWrapper(proc.stdout, information. Furthermore, the audio file is put in the
encoding=”utf-8”): # or another encoding current working directory – it contains whatever
print(line) audio is picked up during the program execution. This
In theory, this code should solve the problem – it
invokes the utility and then parses its output. However,
it does not work as intended – just as before, this TALKING BACKWARDS
version also exhibits significant lag.
“In many cases, the final result of
Work-shy Pi
While a modification of the program structure of the previous translation becomes
Spchcat is possible, a more convenient approach is
available, such as the following: available only after the user has
finished speaking the next sentence.”
$ spchcat audio/8455-210777-0068.wav > /tmp/
transcript.txt
This motivates the utility to take a WAV file and
parse it as a whole – this works without delays, as the knowledge then permits us to modify the above-failing
input field is fully limited. Given the availability of this automatic processor:
API, a different approach can be chosen. Why not proc = subprocess.Popen([“spchcat”, “output.wav”],
simply record when invoked, and then pass the WAV stdout=subprocess.PIPE)
file to the TTS engine to process? for line in io.TextIOWrapper(proc.stdout,
This job requires a way for the Python engine to encoding=”utf-8”): # or another encoding
access the Raspberry Pi’s sound hardware. This is print(line)
most easily accomplished via the PyAudio module, Popen is given an array consisting of two strings:
which has detailed documentation under the URL the first designates the binary to be executed; the
https://people.csail.mit.edu/hubert/pyaudio/ and can second passes in the parameters the binary needs. The
be considered a quasi-standard part of Python. rest of the program is pretty much the same.
The main challenge involves installation; because
PyAudio is tightly integrated into the operating system, Further listening
deploying it via the Pip embedded compile process is Our binary package is based on a product that has
likely to fail. A smart approach involves using the been eclipsed by the latest research results available
package sources that belong to the distribution: to the API field. A more modern library is found at
$ sudo apt install python3-pyaudio https://github.com/coqui-ai/TTS – at the time of
With this out of the way, we can proceed to writing, however, there is no handy wrapper available.
developing the test harness. It is, by and large, a copy Another interesting improvement involves the use
of the example found on the PyAudio website: of an external button. This way, the user could push
import wave and hold the button to enable voice recording, which
import sys promptly ceases when the button is released.

www.techradar.com/pro/linux October 2023 LXF307 37


A.I. Pi projects

A face for AI…


We’re not the prettiest, but perhaps our Pi might not take offence.

ven though our face-detection routine uses ...

E higher-level libraries, the universal OpenCV


library is also required; it provides various
$ sudo apt install -y ./opencv_64.deb

value-added services, such as methods that convert Machine Learning Libraries


images between various colour spaces. Even though OpenCV integrates itself deeply into the
Given that a manual installation of OpenCV is a high- OS, it is but one of many requirements for a successful
effort task (and requires hours of compile time, as ML pipeline. The next step involves downloading a
discussed at https://pimylifeup.com/raspberry-pi- package created by Adam Geitgey – it provides a high-
opencv/), the following steps take a different approach. level face detector API for Python developers:
We’re using the precompiled packages described at ~/cvspace $ pip3 install face-recognition
https://lindevs.com/install-precompiled-opencv-on- Don’t worry if the deployment process is stuck at:
raspberry-pi, which can be downloaded from https:// Building wheel for dlib (PEP 517)
github.com/prepkg/opencv-raspberrypi. This provides …
an OpenCV library that is in principle ready to run and Pip needs to perform complex compiles before the
contains all elements except for the GUI support, which packages are deployed. A delay of up to 15 minutes is
the repository maintainer chose not to include. normal; if your Pi’s power supply is low quality or the
Be that as it may, the actual installation of the SD card is low, an even longer wait is not unusual.
OpenCV library is accomplished by deploying a DEB When the compile is over, you may see errors like
package, which is downloaded using Wget: : WARNING: The scripts face_detection and face_
$ wget https://github.com/prepkg/opencv- recognition are installed in ‘/home/pi/.local/bin’ which
raspberrypi/releases/latest/download/opencv_64.deb is not on PATH.
These are harmless – you’re more interested in
important information such as the following:
SHOW YOUR FACE! Successfully installed dlib-19.24.2 face-
recognition-1.3.0 face-recognition-models-0.3.0
Facial recognition is The imutils package then needs to be deployed:
among the most ~/cvspace $ pip3 install imutils
popular demonstration
applications of AI. When On the shoulders of AI giants
done right, a process One of the benefits of the Python community is the
computer can identify wide availability of code samples. There is almost no
its user by getting a few job for which a Pythonist can’t find an open source
camera-frame grabs of implementation. In the case of face detection, we’ll use
his or her face. the MIT-licensed source code developed by Caroline
While face-detection Dunn – her code is unnecessarily complex in that she
systems are not without used the OpenCV code also for GUI display and image
their weaknesses (such acquisition. Due to that, we need to modify the various
as their susceptibility programs before running them.
to unlocking via a Be that as it may, the first task involves downloading
photograph), the sheer the code from the repository:
impressiveness of most The sticker protects the camera during assembly. ~/cvspace $ git clone https://github.com/
systems is enough to carolinedunn/facial_recognition.git
justify a punt. ~/cvspace $ cd facial_recognition/
In the steps on these pages, we are using a hotchpotch of various The next step involves modifying train_model.py. As
components to get a decently-well-working face-detection stack provided by the repository, it is intended to obtain
running with minimal effort. Since most of the parts used are well training data from an array of JPEG files found in the
documented, the system created here can also be used as a stepping Pi’s filesystem. Given that our computer is connected to
stone towards your own experiments in the field of machine vision the camera, we can harvest them live. For this, the first
and facial detection. modification is an include pointing to libcamera2:
Furthermore, the relatively new libcamera2 API of the Raspberry Pi from picamera2 import Picamera2
is also given a little workout; after all, nothing is more satisfying than After that, an image acquisition configuration needs
seeing a new programming interface in action. to be created:
In terms of hardware, this tutorial does not require much – the picam2 = Picamera2()
algorithm is so stable that it doesn’t even mind issues such as the config = picam2.create_preview_
camera being covered with its shipping cover (shown above). configuration(main={“size”: (640, 480), “format”:
“YUV420”})

38 LXF307 October 2023 www.linuxformat.com


A.I. Pi projects

picam2.configure(config)
picam2.start(show_preview=True)
Working with the API is somewhat complex, as it
works with the fully stream-driven paradigm. Therefore
our first task is the creation of an example configuration
– it is a struct containing various parameters specifying
how information from the camera sensor is to be
presented to the application.
In the case of our example, the attribute “format”:
“YUV420” is especially important – it specifies the bit-
field sequence that will be expected by the OpenCV
code. Furthermore, we invoke the method picam2.
start(show_preview=True) to start the actual image-
processing pipeline. By setting show_preview to true,
we furthermore spawn a preview window.
After that, the main work loop needs to be modified:
while True:
print(“-------”)
print(“are we done? n for another one, q to
terminate”)
inp = input(); above, the precompiled OpenCV image was compiled The face
if inp == “q”: without the GUI stack. recognition is
ready for action.
break; Due to this, the first act involves modifying the
print(“Capturing”) image-acquisition pipeline so that it uses libcamera2
yuv420 = picam2.capture_array() instead of OpenCV:
rgb = cv2.cvtColor(yuv420, cv2.COLOR_ ...
YUV420p2RGB) data = pickle.loads(open(encodingsP, “rb”).read())
We intend for each acquisition cycle to be triggered #vs = VideoStream(usePiCamera=True).start()
by pushing n and Return – this is accomplished by the picam2 = Picamera2()
code shown here. The method picam2.capture_array() config = picam2.create_preview_
momentarily freezes the CCD data stream and returns configuration(main={“size”: (640, 480), “format”:
an array with colour information, which is then “YUV420”})
transformed into the format expected by the machine- picam2.configure(config)
learning payload. picam2.start(show_preview=True)
After that, one of the predefined methods in the After that, the main work loop must be modified to,
face detection module can be used to determine once again, process the image data provided:
the face position: while True:
boxes = face_recognition.face_ yuv420 = picam2.capture_array()
locations(rgb,model=”hog”) rgb = cv2.cvtColor(yuv420, cv2.COLOR_
encodings = face_recognition.face_encodings(rgb, YUV420p2RGB)
boxes) frame = imutils.resize(rgb, width=500)
for encoding in encodings: ...
knownEncodings.append(encoding) In principle, the program is ready to run – due to
knownNames.append(“Tam”) the missing GUI support, errors will crop up pointing to
The example at hand trains only one face. If you missing elements in the OpenCV framework. If this is
want to train the model to use multiple faces instead, the case on your machine, simply comment out the
the string passed to knownNames must be modified to offending line.
contain the name of the person currently occupying the When run successfully, a result similar to the one
space in front of the sensor. in the screenshot (above) appears. Note that the
Finally, image information is to be persisted. The preview window runs independently of the rest of the
code is a prime example of the persistence module – if Python program, providing an overview of whatever
you have issues understanding it, please consult the information is shown in front of the CCD sensor.
documentation at https://docs.python.org/3/library/
pickle.html to learn more about this generally useful Going further
part of the Python standard library: While a library-based face detection system is
data = {“encodings”: knownEncodings, “names”: convenient to use, it doesn’t go very deep into the
knownNames} underlying neural network theory. Should you wish to
f = open(“encodings.pickle”, “wb”) learn more about the underlying mathematics, the
f.write(pickle.dumps(data)) tutorial at https://pyimagesearch.com/2018/09/24/
f.close() opencv-face-recognition/ might be useful – do,
however, keep in mind that it is quite difficult.
Harvesting the models Finally, a disclaimer is required: this code must not
Once the model files are persisted, the facial_req.py be used for any security-relevant applications. It can
script is intended to be used to perform the actual easily be tricked – for example, with a static image of
image detection. It has to be modified – as mentioned the relevant person.

www.techradar.com/pro/linux October 2023 LXF307 39


A.I. Pi projects

Our chatty AI man


Get your Pi to chat like a human, mostly.

ur first test involves running the LLaMA

O payload – discussed in LXF304, it creates a


ChatGPT-like bot that runs locally. Due to the
extremely large size of the model, which has to be
obtained via BitTorrent, this task cannot be completed
solely on the Raspberry Pi – instead, a workstation is
required to handle some of the more computationally
intensive preparation tasks.
Furthermore, be aware that the quantisation steps
have to be performed once again even if you’ve done
them in the past. The LLaMA framework receives
frequent upgrades – trying to use a recent version
with an ancient quantisation leads to errors.
Values in the MiB swap row relate to swap memory.
Excursus: swap it
Since advanced operating systems became available SWAPSIZE is restrained to about 2GB. While this
on all kinds of workstations, expanding the working might be enough for an 8GB Raspberry Pi, the more
memory by using remanent memory in a process affordable 4GB version we’re using would run out of
called swapping has become popular. memory in such a use case.
The Raspberry Pi’s RAM can be expanded almost Saving the file is not enough to update the swap
unlimitedly by using swap – in practice, the main infrastructure. Instead, first enter the following to
limitation is usually the microSD card. Such cards restart the swap memory management system:
tend to not respond well to significant write loads. $ sudo systemctl restart dphys-swapfile
In the following steps, we work around the problem After that, the command sudo dphys-swapfile setup
via the contraption pictured (below). It is a no-screw must be run – its perpetual task in life is updating the
housing filled with a 128GB SSD left over from a physical files found in the filesystem. In our case, a
workstation. When connected to one of the Pi 4’s message similar to the following was output:
USB 3.0 ports, decent transfer rates can be achieved. want /media/pi/externalssd/swapspace/swap=
Once the device is connected, the partition must be 16000MByte, checking existing: deleting wrong size file
set up. For this, enter the command sudo pico /etc/ (2147483648), generating swapfile ... of 16000MBytes
dphys-swapfile to load the swap file configuration file This indicates that the swap files in the filesystem
in Pico. After that, the following three values must be have been updated in accordance to the settings
enabled and/or uncommented: made. Finally, rerun sudo systemctl restart dphys-
CONF_SWAPFILE=/media/pi/externalssd/swapspace/swap swapfile to bring the new files into action. The
CONF_SWAPSIZE=16000 successful execution can best be checked by using
CONF_MAXSWAP=22048 the top command – it should show the swap file size in
Give an old SSD a CONF_MAXSWAP is especially important – should a fashion similar to the one in the screenshot (above).
new lease of life. you happen to forget to enable it, the value of CONF_
Prepare for quantisation!
Facebook’s LLaMA model is still only available for
reasearch purposes – this is availble via a torrent
script. Fortunately, it can easily be deployed by
using the shell script found at: https://
raw.githubusercontent.com/Elyah2035/llama-dl/
main/llama.sh.
Having downloaded it successfully, open the file and
edit the MODEL_SIZE variable as per the following to
limit the amount of model data downloaded only to the
smallest of the four models, known as 7B:
MODEL_SIZE=”7B” # edit this list with the model sizes
you wish to download
TARGET_FOLDER=”./” # where all files should
end up
After that, enter the following two commands to set
the executable bit and start the download process of
30GB of model data:

40 LXF307 October 2023 www.linuxformat.com


A.I. Pi projects

~/convforrpi$ chmod +x llama.sh


~/convforrpi$ ./llama.sh LLAMAS ON A DIET!
In the next step, the usual llama.cpp environment
must be downloaded along with some requirements. Artificial intelligence jobs are known for the high demands placed on
Finally, the make command is invoked in order to compute power required. As our last experiment in this feature, we
compile the code: are taking Eben Upton at his word and trying to use the Raspberry Pi
~/convforrpi$ git clone https://github.com/ggerganov/ as a computer for running real (as in large computer level) AI tasks
llama.cpp on a shoestring.
Cloning into ‘llama.cpp’... Be aware that this is not an economically sensible approach –
... when you have added the external SSD required to handle the large
~/convforrpi$ cd llama.cpp/ amount of model data, purchasing used workstations gives more
~/convforrpi/llama.cpp$ python3 -m pip install torch bang for your buck, especially as such workstations can easily take
numpy sentencepiece 16GB of RAM, whereas the Raspberry Pi maxes out at an almost-
~/convforrpi/llama.cpp$ make unavailable and incredibly expensive complement of 8GB.
After that, the actual model conversion can be done Be that as it may, seeing the Raspberry Pi run large-scale compute
via the following commands. Be careful to duplicate payloads remains a fascinating testament to the power of the
the model position as discussed: system-on-chip used. In addition to that, keep in mind that more
~/convforrpi/llama.cpp$ python3 convert.py powerful alternative computers such as the OKDO or the Asus
models/7B/ TinkerBoard are available – in short, one can truly claim that this is
... the age of the single-board computer.
Wrote models/7B/ggml-model-f16.bin
~/convforrpi/llama.cpp$ ./quantize ./models/7B/ggml-
model-f16.bin ./models/7B/ggml-model-q4_0.bin q4_0 models folder from the workstation into the local
Importantly, the folder downloaded via BitTorrent distribution. After that, invoke the following command
must be placed in the models subfolder as per the to start the compile process:
following code: externalssd/llama $ cd llama.cpp/
~/convforrpi/llama.cpp/models$ ls externalssd/llama/llama.cpp $ make
7B ggml-vocab.bin tokenizer_checklist.chk tokenizer. At this point in time, the following command can be
model run to invoke the Chat assistant known from our
previous experiments on the workstation:
Back to the Pi… externalssd/llama/llama.cpp/examples $ ./chat.sh
At this point in time, the contraption shown in the Keep in mind that the performance of the Raspberry
photograph can shine – disconnect it from the Pi is significantly lower than that of the workstation.
powered-down Raspberry Pi and connect it to the Entering a question, for example, is relatively slow –
workstation. Then, move over the contents of the when connected via SSH, do not be surprised if the
models folder. After that, return to the Raspberry Pi program needs up to one minute before the entered
and run the following set of commands to provide it prompt is mirrored back to you.
with its own distribution of llama.cpp: Nevertheless, pushing Return – admittedly
externalssd/llama $ sudo apt install git g++ build- eventually – yields a result not dissimilar from what
essential was seen on the workstation in the previous article.
externalssd/llama $ git clone https://github.com/
ggerganov/llama.cpp Raspberry Pi 5?
externalssd/llama $ python3 -m pip install torch Even though our local Raspberry Pi-based chatbot is
numpy sentencepiece currently of little practical value, being able to run a
Importantly, do not copy over the entire folder. program as complex as LLaMA on a £50 process
While this is most definitely tempting, it will lead computer is an impressive technical feat.
to a non-working program. Bear in mind that your Furthermore, keep in mind that Moore’s Law is
workstation most likely has an x86 (or x64) processor, unlikely to disappoint – it should just be a question of
while the Raspberry Pi’s CPU is based on the ARM time until more powerful Raspberry Pi alternatives
instruction set. When the compilation has been become available. In short, it truly is the age of artificial
successfully accomplished, move the contents of the intelligence on the single-board computer.
The model is
in place.

www.techradar.com/pro/linux October 2023 LXF307 41


Pi USER
Rejoice! 271% more Pi Les Pounder
works with groups

available than in 2022


such as the
Raspberry Pi
Foundation to help
boost people’s
maker skills.

Les Pounder wonders if 75% of all statistics are MORE Pi


made up, but at least he can buy a Pi 4 now. FOR EVERYONE
s stocks of the many Raspberry Pi Raspberry Pis as a whole were 271% more The last few years have been

A models steadily improve, we’re now


coming to the end of a difficult
available in July 2023 than July 2022 (394
restocks versus 106). And, among particular
rough for us all. A (hopefully)
once-in-a-lifetime pandemic
period for the Pi community and the world models of Pi, the Pi Zero 2 W grew the most, affected every facet of our
at large. So, how bad was it and how is it going from one to 56 restocks year-on-year. lives. A big impact was felt in the
improving? To find out, we contacted Since Upton announced that million-unit global supply chain, and while
RPiLocator, a service that sprang up to help months were ahead, we have seen a steady the Raspberry Pi was relatively
Raspberry Pi fans locate precious Pis. Thanks increase in the number of restocks, and that untouched for a while, measures
to its data, we can see the highs and lows. means more Pis are flooding into the sales had to be taken to protect the
Using the number of restocks as a proxy channels. The last 60-day period has seen supply. For single purchases –
for product availability, we can see that the Raspberry Pi 4 be the clear winner for ie the general public – we had
restocks, at 330. In second place is the Pi to make do with a trickle of
Zero W, with 82, and in third place is the Raspberry Pis. Sometimes this
Pi Zero 2 W, with 62. Things are looking much trickle flowed a little faster. I’ve
better as resellers are getting more product. just spent a few days going
As per Upton’s predictions, it seems that through global restock data for
2023 is looking much brighter for our Tom’s Hardware, https://bit.ly/
favourite single-board computer. lxf307pi, and over the last 78
weeks, the Raspberry Pi 4 has
Raspberry Pi sales have been up and been in stock for 76. Remember,
down more than a roller coaster. that this is for all official resellers
CREDIT: Pexels across the globe, so there were
times when the Raspberry Pi 4
(and many others) went out of

RISC-V x86 Lichee RISC-V stock for a few weeks in a certain


location. The restock data
doesn’t tell us how many Pis
Box64 emulation. Small and delicious. were sent, just that a reseller
received new stock.
The latest version of Box64, a popular The new Lichee Pi 4A uses open source Now, 2023 is entering “million
x86_64 emulator for Linux running on RISC-V C910 architecture. This small unit months”, https://bit.ly/
architectures such as ARM/AArch64 and desktop SBC is manufactured by Sipeed and lxf307upton, a prediction made
RISC-V, introduces significant performance comes in a variety of configurations. It comes by Raspberry Pi CEO Eben
improvements, making gaming possible on with Debian pre-installed, uses a RISC-V Upton. These next few months
RISC-V-based platforms such as the Vision C910, has 4GB to 16GB of memory, eMMC should see Raspberry Pi
Five 2 board. Added to the 0.2.4 release, it’s storage, dual Ethernet and HDMI-out. production enter one million
a huge milestone for emulation support. https://sipeed.com/licheepi4a units per month, clearing away
https://github.com/ptitSeb/box64 the backlog and meaning that
we can soon get more Raspberry
Pis for our projects. In the UK,
resellers Pimoroni and The Pi
Hut are offering multiple
Raspberry Pi 4s per purchase, a
change from single-unit sales
enforcement, which kept
everything fair.
If you want a Raspberry Pi, you
now have a 271% better chance
of picking one up at the RRP.
Now playing x86 games. It’s not Li-cheap!
CREDIT: Starfive CREDIT: Sipeed

www.techradar.com/pro/linux October 2023 LXF307 43


REVIEWS Enclosure

52Pi Rack Tower


Les Pounder owns multiple Raspberry Pis but has yet to make a cluster.
Perhaps this enclosure will see him put all of his Pis on the shelf?
aspberry Pi cases come in all shapes and sizes,
IN BRIEF
It looks cool,
R but the 52Pi ZP-0088 Rack Tower is far from a
case, more of a jet engine-styled enclosure. Our
but it’s not review model features four shelves, on which we can
necessarily store a mixture of Raspberry Pis and 2.5-inch SSDs. Any
there to model of Pi, from the B+ onwards, can be used with the
keep your shelves. This is thanks to Raspberry Pi standardising
overclocked the M2.5 mount points. The enclosure can also be used
Raspberry Pi to house an Nvidia Jetson, but our focus is on the Pi.
cool. This Included in the kit are four microSD card extenders that
enclosure is route the microSD card to be parallel with the Ethernet/
more to keep USB ports of a Raspberry Pi model B.
everything tidy Constructing the enclosure is fairly straightforward,
and it does that but there are a few gotchas. You need to pay close
really well, attention to the orientation of the shelves; get this wrong
thanks to a and you have to take it apart. The construction is made
series of from laser-cut acrylic and after removing the protective
shelves and plastic, you’re left with a powdery ‘film’ that requires
plenty of space. cleaning with isopropyl alcohol. Assembly can be an It certainly looks good on the desk and it does tidy up some of our
If cooling is exercise in patience. The laser-cut parts are held in place clutter, but the big RGB fan is more for show than cooling.
what you need, with tabs and slots, but until we secure them with the
look at 52Pi’s included screws, they shift. The thin assembly manual acrylic looks good and is stable. Typically with tab and
Ice Tower has a step to attach heatsinks to the Pi, but none are slot construction, the build can be slightly unbalanced,
coolers and included in the kit. At the front of the enclosure is a but the Rack Tower is pleasantly solid. Four aluminium
leave this 120mm RGB fan. This is powered from the 5V pins of the rods hold the structure together, and an acrylic carrying
jet engine Pi, potentially blocking access to the GPIO if you wish to handle provides some strength at the top of the case.
enclosure on use a HAT. The RGB element is also powered from the If you are building a network cluster, the four shelves
the shelf. Pi’s GPIO, but don’t get excited – the RGB LEDs are static provide plenty of space. If you can find multiple Pis in
and don’t bring much to the party. stock. The inclusion of microSD card extenders is a
Our review test was formed using a Raspberry Pi 4 welcome addition, but given the shelves also support
and a 2.5-inch SSD. Both were secured to their shelves 2.5-inch drives, USB 3 drives should be your priority. That
using a mixture of M2.5 screws and stand-offs. With the does drop the number of Pi shelves down to two, but you
shelves in place, it can be difficult to add a Raspberry Pi can purchase Rack Towers with more shelves. The fan is
The kit is or drive, but it can be done. We configured the Pi to boot good. It moves air over the Raspberry Pis and your SSDs,
expansive and from USB, and connected the 2.5-inch drive via USB 3. It but it’s questionable how useful that is. We didn’t run
provides every nut all worked well, but the enclosure merely provided a any temperature tests, mainly because of the open-air
and bolt to connect means to tidy up a mass of cables. nature of the enclosure. If you seriously want to keep
your Raspberry
Pi, Nvidia Jetson On the desk, the enclosure looks good. Not uber-chic; your Raspberry Pi cool, an enclosed case with heatsinks
and SSDs to the more DIY than anything. The 120mm fan is quiet, apart and active cooling is the way to go. The 52Pi Rack Tower
four shelves. from the garish static RGB LEDs. The smoked black is more for show than keeping your Pi super-cool.

VERDICT
DEVELOPER: 52Pi
WEB: https://52pi.com
PRICE: £40

FEATURES 7/10 EASE OF USE 7/10


PERFORMANCE 6/10 VALUE 6/10

It looks good, and holds everything neatly but its cooling ability
is questionable and is more for show than performance.

Rating 6/10

44 LXF307 October 2023 www.linuxformat.com


3D printer REVIEWS

Elegoo Neptune 4
“Smoke me a Klipper, I’ll be back for breakfast!” cries Denise Bertacchi.

legoo has entered the speed race with a much


SPECS
Vol: 225x225x
E faster version of its popular Neptune 3 Pro, the
Neptune 4. It is speedier thanks to a hidden
Klipper
shines on this
affordable
265mm install of Klipper firmware, plus everything that made
printer.
Type: PLA, the Neptune 3 Pro a favourite 3D printer for beginners.
PETG, TPU Current pricing makes this quite a bargain in the field
(up to 300°C) of fast printing. However, the way Elegoo chose to
Extruder: integrate Klipper is confounding. It’s hidden in the
Direct drive background, granting the user speed while making its
Nozzle size: other perks difficult to access. The hands-off approach
0.4mm might work fine for complete beginners, but if you want
high flow to poke under the hood, you’ll have to find a long enough
Platform: Ethernet cable to reach your router or take a leap of faith
PEI textured on finding a compatible Wi-Fi dongle.
spring steel There’s still a lot to love about the Neptune 4. It
sheet, heated arrives 90% pre-assembled, making it a quick build. It
Levelling: Auto, has dual Z axis, a grippy direct drive that handles TPU
inductive probe like a champ, a high-flow nozzle rated to 300°C, a giant
Sensors: cooling fan and an easy-to-navigate touchscreen. It even 250mm/s. There is no profile for higher speeds, so you’ll
Runout has an LED light on the gantry. have to experiment with that yourself.
Comms: Levelling has taken a step backwards, though. It’s Speed isn’t everything; it can wreak havoc on a glossy
USB, LAN still very good, but it’s adopted a more tedious manual- decorative finish, while many prints are not long enough
Control: Colour plus-auto levelling system. It’s not too surprising that to reach the claimed 500mm/s. Once you factor in
touchscreen, Elegoo didn’t include an accelerometer for tuning input acceleration and the need to slow down for corners, you
removable shaping, but there’s no visible way to hook one up either. do 250mm/s at best. But the Neptune 4 is fast, achieving
Footprint: 475x A beginner won’t see this as a failing, as the factory a very good 20-minute output on Speed Benchy.
445x515mm settings are really quite good. However, this is the kind The printer is more than capable of producing
Weight: 8.3kg of feature a more seasoned maker will sorely miss. smooth, quality prints when you slow it down a bit. Our
X-wing pen holder (see photo, above) was printed using
Klippered wings the default settings, which uses 250 for the inner parts
There’s a removable touchpad with a magnetic base, but and 130 for the outer walls and top/bottom layers. The
what’s more intriguing is what’s on it. We’ve seen many detail is crisp, without any ghosting, but the colour is a bit
printers running Klipper, and the best use KlipperScreen, washed out from the speed. Total print time was three
which gives you more features. It seems Elegoo decided hours and nine minutes, using three walls, 250mm/s
the best way to run Klipper is to not see it at all. inside parts and 75mm/s outer layers and walls.
The Neptune 4 comes with a copy of Elegoo Cura, The Neptune 4 is a confusing little 3D printer. Is it for
which has profiles for all its machines and several beginners? Maybe. Is it for fans of Klipper? Not really. It
materials. It also has the added ability to create a comes with an unrestricted copy of Klipper, a huge plus,
thumbnail of your model to display on the printer. but it’s difficult to access without Wi-Fi. You can certainly
Although Elegoo claims the Neptune 4 has a maximum run a cable to it, but how many people have their router
speed of 500mm/s, the default profile provided is on the same workbench as their 3D printer?

VERDICT
DEVELOPER: Elegoo
WEB: www.elegoo.com
PRICE: £258

FEATURES 8/10 EASE OF USE 7/10


PERFORMANCE 8/10 VALUE 7/10

Much the same as the Neptune 3 Pro but with added Klipper.
Fast and accurate, The lack of Wi-Fi or KlipperScreen negates most of the perks.
the Neptune 4

Rating 7/10
does a fine job
on our speed
benchmark.

www.techradar.com/pro/linux October 2023 LXF307 45


TUTORIALS Wiimote bot control

CWIID
Credit: https://github.com/azzra

Control a Pi bot
with a Wiimote
Les Pounder travels back to 2014, the last time that he held a
Wiimote that wasn’t embedded in an LCD TV.

e are travelling back in time.

W Nine years, to be precise. That


was the last time we connected
a Nintendo Wiimote to a Raspberry Pi.
In this tutorial, we are learning how to
configure a Pi to communicate with a
OUR Wiimote over Bluetooth. We’ll put the
EXPERT connection to use by constructing a
Les Pounder very simple robot control script to spin
is associate motors connected to a Cytron Maker
editor at Tom’s Drive motor controller. Using this script
Hardware and a as a template, you can easily build a
freelance maker remote-controlled robot using the
for hire. He blogs Raspberry Pi 4, 3B+, Zero W or Zero 2 W.
about his
adventures and Wiring up the circuit
projects at The circuit has four main components: a Turn an old Nintendo Wiimote into a magic wand for your next robotics project.
http://bigl.es. Raspberry Pi, a Maker Drive motor
controller, motors and a power source for the motors. $ sudo apt install wminput autoconf gawk bison flex
The Pi connects to the motor controller using pins 14,
YOU NEED 15, 18 and 23. These control the direction in which the
libbluetooth-dev python3-dev git
Next, install the bluetooth package. This is different
Pi 4/4B+/ two motors spin. We also connect any GND pin on the from the Bluetooth settings menu found in Raspberry
Zero W/2 W Pi to the GND pin of the Maker Drive. Next we connect Pi OS, which does not work with Wiimotes, sadly.
Cytron an external 5-6V power source to the VB+ (red) and $ sudo apt install bluetooth
Maker Drive VB- (black, GND) terminals of the Maker Drive. The VB- The final installation is Uinput, a tool that enables
4x AA and Pi GND connection form a common ground from our Wiimote to emulate a user input device:
battery box which the circuit can base a voltage reference. The $ sudo apt install uinput
4x AA motors are connected to M1A, M1B and M2A, M2B. In the terminal, clone (download) this Cwiid GitHub
batteries These are controlled by the Pi GPIO pins, but the repository. This is not the official repository, but it
2x DC Maker Drive protects the delicate GPIO pins from the works well. There are multiple versions of Cwiid for
motors motors, as motors can pull a lot of current. Please refer Python 2 and 3, but this repository works.
5x female- to the circuit diagram in the project’s download. $ git clone https://github.com/azzra/python3-wiimote.git
to-male Change directory to the cloned repository:
jumper wires Setting up the Wiimote $ cd python3-wiimote
Code: Sadly, we can’t just connect a Wiimote using Raspberry Run the following commands to configure the
https:// Pi OS’s Bluetooth control panel. Instead we need to do repository ready for compilation:
github.com/ a little work, but thankfully the wonderful Raspberry Pi $ aclocal
lesp/ community has created its own Python packages to $ autoconf
LXF307- make it really easy. $ ./configure
Wiimote- First, ensure your Pi is running the latest software. Now compile Cwiid and install it to your system.
Robotics/ Open a terminal and run the following commands: $ make
archive/refs/ $ sudo apt update && sudo apt upgrade -y $ sudo make install
heads/main. In the terminal, install the following packages to Right now, only root can access the Wiimote – we
zip ensure that we can install Cwiid: need to make a new udev rule for Wiimotes. In the

46 LXF307 October 2023 www.linuxformat.com


Wiimote bot control TUTORIALS

terminal, run this command to create a new udev file:


$ sudo nano /etc/udev/rules.d/wiimote.rules
Add this line and then press Ctrl+ X, Y and Enter to
save and exit:
KERNEL==”uinput”, MODE=”0666”
Restart the udev service to reload the rules,
including the new Wiimote rule:
$ sudo service udev restart
The final installation step is to load the Uinput
module on boot, so open a terminal and run the
following command:
$ sudo nano /etc/modules
Go to the bottom of the file and add the following
line. Then press Ctrl+X, Y and Enter to save and exit.
uinput
Reboot the Raspberry Pi and return to the desktop.

Using a Wiimote with Python


With Cwiid, we can write code to interact with the
Wiimote and use it to trigger events. Select Thonny
from the Programming menu. A new, blank document elif buttons & cwiid.BTN_DOWN: The circuit for
this project is split
opens. Our first three lines of Python are imports for robot.backward()
into four areas:
cwiid, time and the Robot class from GPIOZero. The all-important Stop button is A, just under the the Raspberry
import cwiid directional pad. Pressing this hard-stops the motors. Pi, the motor
from time import sleep elif buttons & cwiid.BTN_A: controller, motors
from gpiozero import Robot robot.stop() and power. Check
that there is a
GPIOZero’s Robot class creates two motors (left The last two lines are outside of a conditional common ground.
and right) for which we pass the GPIO pin references. test and merely print the current button press (as a
The left motor is on GPIO14 and 15; the right one is on numerical value – more on that in the boxout below),
18 and 23. Note that we’ve written it 23,18, so that the then pause for 0.1 seconds.
motor spins in the opposite direction to the left. This print(buttons)
means that when the robot chassis is built, the robot sleep(0.1)
will move forwards and backwards. Save the code as wiimote-control.py. Click Run to
robot = Robot(left=(14,15), right=(23,18)) start the code. On the Wiimote, press 1 + 2 to enter
Print an instruction to the user to press 1 + 2 on the pairing mode. Once connected, you will see numbers
Wiimote to enter pairing mode. A three-second delay scroll up the screen; this is the numerical value of the
means they have time to react. currently pushed button, 0 meaning no button. Press
print(“Press 1 + 2 to set the wiimote into pairing Up or Down to spin the motors and press A to stop.
mode”) You’ve just built the basis of a Wiimote-controlled
sleep(3) robot. We could replace the Pi 4 with a Zero W, Zero 2
Next, create an exception handler that will try to W or Pi 3B+ and get the same performance.
connect to the Wiimote. If it fails, typically a NameError
then a runtimeError is raised and we can exit gracefully.
try: INPUT… INPUT…. INPUT!!!
wii=cwiid.Wiimote()
wii.rpt_mode = cwiid.RPT_BTN Each button on the Wiimote returns a numerical value. In the tutorial,
except NameError and RuntimeError: we ignored that and just searched for a specific button press. But
print(“I couldn’t see a Wiimote”) what if you want to detect a specific combination of buttons? Well,
exit() Cwiid has us covered, but we need to do some maths. The up
If the Wiimote is connected, then the while True direction returns a value of 2,048, down is 1,024, and A is 8. So, if
portion of the code is activated. It creates an object, we press down and A together, it returns 1,032. The tutorial script
buttons, which stores the current state of all the returns the value of each button press, so all you need to do is a
Wiimote’s buttons. little maths for your chosen key combination. We can then use an
while True: additional conditional test to look for a specific numerical value in
buttons = wii.state[‘buttons’] the buttons object. The value, once detected, could trigger an event,
Now we look for a specific button press in buttons. drift the robot around a track or world domination, your choice.
We are checking that the Up direction has been We’ve provided an additional file, wiimote-control-numerical.py,
pressed. If so, we want the robot to move forwards: which has an example of how to handle numerical input. The only
if buttons & cwiid.BTN_UP: buttons we don’t advise pressing are the power button and the - and
robot.forward() + buttons. These cause the code to hard exit, but it doesn’t tell you
What if we want to go backwards? A press of the that it has exited. The file is included in the download for this tutorial.
Down direction spins the motors in reverse:

GET YOUR Pi FILLING HERE Subscribe now at http://bit.ly/LinuxFormat

www.techradar.com/pro/linux October 2023 LXF307 47


IN DEPTH Inside /e/OS

YOUR PHONE
Tired of being tracked and spied upon by popular mobile OSes,
Jonni Bidwell is ditching Android and taking back privacy with /e/OS.

ast issue we reviewed Murena’s the Murena cloud, you don’t have to miss out

L Fairphone 4 (its latest and


greatest offering loaded with the
privacy-respecting /e/OS). We
on centralised storage, contact management
and notes. Your data is stored on wind-
powered, GDPR-compliant servers in Europe.
noted a few rough edges, but on the whole If you don’t like the idea of using someone
were very impressed. So much so that we else’s services, you can even self-host almost
decided to dedicate four pages to /e/OS. exactly the same Murena cloud offerings on
DeGoogled Android is nothing new, but until your own infrastructure.
now no one’s come up with a satisfactory One of /e/OS’s standout features is its
solution to replace those ever-so-convenient Advanced Privacy Settings. These enable
Google services and Play Store apps. you to block trackers, hide your location or
With /e/OS, you get full Play Store access even route all your traffic over Tor. And all
(if you want it), your own privacy-respecting without any messy configuration. Honestly,
cloud services, and a beautiful and unique there’s never been a better time to ditch
user interface. Thanks to MicroG, the Apple and Google, so read on and discover
dreaded machination that is Google Play how Murena and the e Foundation are putting
Services has been expelled. And thanks to privacy before profit.

48 LXF307 October 2023 www.linuxformat.com


Inside /e/OS IN DEPTH

ack in 2018, the EU levelled a fine against

B Alphabet Corp (Google’s parent company),


citing anti-competitive behaviour with respect
to the Android mobile OS. While the record-breaking
fine (surpassing a different antitrust fine against
Google the previous year), a cool €4.34 billion
(£3.8 billion), was unlikely to dent Alphabet’s profits
(although it did mount an appeal, unsuccessfully), it
also came with a stern demand from EU competition
commissioner Margrethe Vestager. The latter took
issue with Google’s mandating that manufacturers
installing Android with the Play Store, Maps and other
popular Google apps (pretty much anyone selling an
Android device) must also install big G’s Chrome
browser and search app alongside them. This was, of
course, highly reminiscent of the EU’s antitrust rulings
against Microsoft in the mid-2000s, which culminated far, the community has ported /e/OS to over 200 There’s a
in the browser ballot screen and banishing of the (quite devices (although it would be misleading to omit that whole lot of
functionality in
dreadful) Windows Media Player for EU customers. In only a handful of these have been marked stable). Murena cloud,
the Android case (dubbed ‘the great unbundling’), We’ve covered (and lamented) the state of Linux on all powered by
manufacturers could provide the core G-Apps without phones a number of times over the years. And in many open source.
having to also include Chrome and search. ways, the picture hasn’t changed. If you want a Linux-
powered device that you can use as a phone, your
Your data is your data best bet is Ubuntu Touch (continued by the UBports
The open source /e/OS (then titled Eelo) was collective after Canonical abandoned it in 2017). If
announced against this backdrop of liberation, as that doesn’t float your boat (or run on your device), try
founder Gaël Duval explained in an interview with PostmarketOS. And if you have the iconic Nokia N900,
The Register: “I’m not happy because Google has or dislike Systemd, you should run Maemo Leste
become too big and is tracking us by catching a lot of (based on Devuan). Most users seeking to escape
information about what we do. They want to know us Google instead run a deGoogled version of Android,
as much as possible to sell advertising,” he said the that is one based on the Android Open Source Project,
same year. “I think that, in the long run, Apple, Google, but lacking all the proprietary Google bits. By far the
Facebook etc business models are harmful for our most common option here is LineageOS (formerly
economical and social environments.” Skip forward Cyanogenmod), which supports over 400 devices.
five years and /e/OS has indisputably made good on, A device running LineageOS can run Android apps
nay surpassed, its goals. There’s a commercial arm, from the likes of the F-Droid store, or you can attempt
Murena (https://murena.com), that partners with to shoehorn Play Store apps through the likes of the
manufacturers and now offers /e/OS on four devices. Aurora store. All of the popular Play Store apps,
Murena also provides a cloud service (https://murena. however, won’t work on pure LineageOS because they We couldn’t help
io, powered by Nextcloud, no less) that provides rely on a terrible library called Google Play Services. but notice that the
storage, document editing, email and calendar (like This opaque monstrosity is present in all official /e/OS monogram
bears a passing
the equivalent Google services, only less Google-ey). Android phones, and runs a number of services in
resemblance to
There’s also the non-profit e Foundation (https://e. the background (some with root privileges) to govern that of a certain
foundation), which guides development of the OS. So everything from payments to location, mapping and, of Borg-like outfit.

MURENA CLOUD
Ever since Google launched documents. Oh, and there’s reasonable rates – for setup-use-mailvelope-with-
its Gmail and Drive apps, no surreptitious scanning of example, 64GB is only €3.99 murena.html .
Android users have come to your files to train AI models, per month. For the privacy- If you are already running a
expect their email and files serve ads or other nefarious conscious, /e/OS includes Nextcloud instance, that can
to be available on their purposes. Once you’ve OpenKeyChain, which makes also integrate more or less
phone. The Murena cloud can signed up, it even offers to easy work of setting up PGP seamlessly. If you’ve always
do all of this and more. And automatically synchronise keys, which you can then use wanted to run a Nextcloud
all without spying on you. It’s your photos, although the with the built-in mail app. If instance but never got round
powered by some great free package only offers 1GB you want to use PGP with to it, you might consider
Image credit: Murena

FOSS tooling, including of storage, which will fill up Murena cloud’s webmail, self-hosting Murena cloud
Nextcloud and OnlyOffice. fast if your device has, say, a you can find a great guide instead. Check the project’s
And altogether it offers a 48-megapixel camera. You to doing just that with GitLab at https://gitlab.e.
complete solution for email, can pay for more storage Mailvelope at https://doc. foundation/e/infra/ecloud-
calendar, contacts and (up to 2TB) at really quite e.foundation/support-topics/ selfhosting for details.

www.techradar.com/pro/linux October 2023 LXF307 49


IN DEPTH Inside /e/OS

yes, LineageOS does provide additional facility for


locking down apps, but be in no doubt that Google Play
Services is watching you.
Enter MicroG, an open source implementation of
Google Play Services that allows most of the apps
on the Play Store to run without contacting Google
servers. It achieves this magic by replicating several
APIs associated with Play Services without any
tracking. A major point of contention here, and the
reason that MicroG is not included by default in
LineageOS, is that MicroG spoofs package signatures.
So, instead of using the certificate associated with an
app on the Play Store (which is then verified by the OS),
a fake certificate is used to pass any attestations.
MicroG even includes Fakestore, a dummy package
Yes, we are course, in-app advertising. Most of these services that mocks the existence of the official Play Store.
currently located require you to be signed into a Google account (a big Lineage’s view is that this represents a security risk,
somewhere exception is Google Maps). And so Play Services and it has led other OSes to take different approaches.
around the Atlantic
Accelerator from provides Google with an awful lot of data, which it Most notably, GrapheneOS (https://grapheneos.org)
the classic game can, of course, correlate with data it already holds runs the official Play Services library in a limited
Syndicate. pertaining to a particular Google account (for example, sandbox. You can read a (slightly dated, but highly
your entire desktop browsing history if you use its detailed) case for signature spoofing from Free
Chrome web browser). Software Foundation Europe at https://blogs.fsfe.org/
Faced with the choice of WhatsApp, TikTok and larma/2016/microg-signature-spoofing-security/.
Candy Crush Saga (think of the children! – Ed) not The reason why we spent three paragraphs talking
working on LineageOS, many users opt to install the more about Google and its subsystems than /e/OS is
latter with a Google Apps package. These, highly that the core of /e/OS is LineageOS and MicroG. Now,
Gaël and the team would be rightly
upset if we claimed that’s all there is to

PRONGS AGAINST WRONGS /e/OS, not least because several other


projects also have the same basis (for

“/e/OS’s Advanced Privacy example, ArrowOS, CalyxOS and


iodéOS). From the moment you boot

module is a three-pronged /e/OS, you can tell it’s something all its
own. On first boot, you’re invited to

defence against everything that’s create (or sign in with) a Murena cloud
account. This is entirely optional, and

wrong with mobile ecosystems.” unlike declining to sign in on a full-fat


Android device, doesn’t limit what you
can do in any way. You might even
want to self-host your own Murena
unofficial, bundles provide Google Play Services, the cloud – it’s easier than setting up Nextcloud and much
Play Store app itself and (optionally) a selection of the easier than setting up email from scratch.
The Magic Earth popular Google apps, and can only be installed at the Once that’s done, you’re greeted not with Lineage’s
mapping tool time of flashing a new ROM. This type of LineageOS Trebuchet launcher, or anything resembling other
is just as good install, while popular, in practice does very little to limit Android launchers. No, instead it’s the warm hues of
as Google’s,
and it uses
Google’s insight into your mobile affairs. Yes, you get /e/OS’s bespoke Bliss Launcher that greet you. Once
OpenStreetMap, so a slimmer version of Android (and liberation from any you have admired those roseate gradients, at least
doesn’t track you. manufacturer-enforced bloat or dubious theming), and if you’re more an Android person than an iOS person,
you might feel a little lost. Especially if (like us) you
prefer the old-school navigation triumvirate running
along the bottom of the screen (which has been
replaced by gesture navigation since Android 10)
or a button to open the applications view.
Bliss Launcher aims for a clear, uncluttered look and
part of that involves the banishing of notification icons
from the top bar. This is especially helpful on newer,
notch-bearing phones (such as the Fairphone 4 we
reviewed last issue), where there simply isn’t room for
half a dozen tiny top-left icons. Instead, notifications
are displayed there for a short while when they happen,
before gracefully vanishing. After that, they can be
found (together with some useful information) on the

50 LXF307 October 2023 www.linuxformat.com


Inside /e/OS IN DEPTH

lock screen, from whence they and messages) before you begin.
can be summarily dismissed. Everything is wiped when you do
this. There’s a fine guide to doing
Advanced Privacy a complete (OK nearly complete)
As we noted last issue, one of backup of your device with Team
/e/OS’s most notable features Win Recovery Project (TWRP) at
is its Advanced Privacy module. https://doc.e.foundation/pages/
This is a three-pronged defence backup-and-restore-with-twrp.
against everything that’s wrong html. This might end up being
with mobile ecosystems. Firstly, quite large, so you need sufficient
it blocks in-app trackers. This is space on your SD card.
done at the DNS level by If you’ve dabbled with
referencing tracker lists alternative mobile OSes, you’ll be
maintained by Exodus and familiar with all the rigmarole of
AdAway. Some apps stop unlocking bootloaders, booting
working with their trackers into Fastboot and installing gauche
stymied, but they can be safe- recovery environments (TWRP, for
listed on a case-by-case basis. example). And, of course, the nail-
Next, there’s an option to not only biting moments before the new
disable Location Services, but OS starts booting. You’ll also
also to randomise it, or set it to understand why we won’t try to
anywhere in the world. This give complete instructions here.
overrides the usual GPS and The bootloader unlocking process
Wi-Fi mapping, rather than using differs from device to device, but
a VPN or the like. As a reader of there is a beta Easy Installer
this magazine, you’ll know we (https://doc.e.foundation/easy-
don’t like commercial VPNs installer) that currently supports
anyway, but if you do want to 21 phones. It’s a multi-platform
hide your IP address, Advanced desktop application (yes, there’s a
Privacy lets you route all traffic The official YouTube app may not work with Linux version) that reduces the
over Tor. Obviously, this is much /e/OS but NewPipe is a fine alternative. process to just a few clicks. If
slower, and unsuitable for your device isn’t supported by the
streaming video, but if you really want to be private, Tor Easy Installer, you can use the traditional installation
is much more suitable than some random VPN that method, which involves installing the Android Debug
you saw in a sponsored link somewhere. The Advanced Bridge (ADB) and Fastboot.
Privacy module may become available for the wider Current /e/OS builds are based on Android versions
Android soon, but for now it’s an /e/OS exclusive 10 (Q) to 12 (S), and by the time you read this, Android
13 (T) builds should be available. If you’d like to try your
Installing the /e/ ROM hand at porting /e/OS to a new device, do check the
If you have a supported device (check the list on the docs. And if you’d like to support /e/OS, you can
Murena website), it ought to be pleasantly easy to ditch donate, offer help on the forums, or tell your friends
Android proper and enjoy /e/OS. Of course, flashing a they should run it, too. These projects with punctuation
new ROM should never be taken lightly, so do back up in their titles are usually awkward to spell out, but this
everything you might possibly need (photos, contacts one can be voiced slash-e-slash, which we quite like.

CAVEATS AND GOTCHAS


We are in no doubt that implemented. For this reason, of scrutiny) is device- is often quick to come up
/e/OS provides one of the you can’t use the Google dependent. Banking apps with workarounds, so do
smoothest deGoogled Pay app for NFC payments, may also fail if the bootloader check the community forums
Android experiences out although some banks provide is unlocked (that is, if you (in particular, the Using /e/OS
there. But it’s important to their own payment apps. installed /e/OS manually). It is section) and MicroG GitHub
note that some apps, even And speaking of banking possible to work around this, Issues page if you encounter
when signed into a Google apps, these (and streaming and in some cases bypass a failing app. There’s also a
account through MicroG, do services such as Netflix) Safetynet, using the Magisk Telegram chatroom you
not work. Anything that relies often demand the device app, but that’s a story for can join at https://t.me/
on in-app payments, for passes Google’s Safetynet another day (or today if you +HYMdK0PkIUdlZWZk.
example, doesn’t work. Or DRM. This is implemented visit www.xda-developers. Finally, of course, don’t
at best, those payments fail, in MicroG, but passing com/how-to-install-magisk). forget to check the official
because the Google Pay API anything more than the Basic The goal posts are always documentation (https://
hasn’t and likely cannot be attestation (there are levels moving and the community doc.e.foundation).

www.techradar.com/pro/linux October 2023 LXF307 51


TUTORIALS
EDITLY

Bring your images


Credit: https://github.com/mifi/editly

and videos to life


Not known for his love of cameras, Shashank Sharma still knows how to
turn images into presentable GIFs and video clips into masterpieces.

emember the good ol’ days of the internet case available in the software repositories, you also

R when the best you could do with your pics


and videos was share them with friends and
need the GL utility (https://github.com/stackgl/
headless-gl), which has its own set of requirements,
family? Close ones at that. This is in stark contrast to listed at the project’s GitHub page.
the modern-day practice of turning everything into a While you’re at it, you should also install the NPM
reel or insert-latest-jargon-here, and releasing it online. package manager. Use the sudo apt install npm
OUR Editly is a CLI utility that relies on FFmpeg to help command if you’re on a Deb-based distro such as
EXPERT you create slideshows, GIFs or movie masterpieces, Debian or Ubuntu, or run sudo dnf install npm for
Shashank complete with music score, text overlays, zooms and RPM-based distros.
Sharma other effects. Best of all, you don’t have to muck about Unless you’re on a rolling release distro, such as
is a trial lawyer with the terminal pushing dozens of different settings, Arch, the version of FFmpeg available in the software
in Delhi and an because Editly works with a JSON file instead to save repositories of your distro is somewhat dated, and
avid Arch user. you time and effort. Whether for private use or for therefore unfit for use with Editly. Refer to Installation
He’s been internet fame, Editly can help turn your images and Is A Chore (opposite), for instructions on how to get a
writing about videos into memorable pieces with very little effort. compatible version of FFmpeg. With all that done,
open source Released under the MIT License, you won’t find you’re ready to install Editly. Run npm install -g editly .
software for Editly in the software repositories of popular desktop
20 years and distros. As well as FFmpeg and FFprobe, which are Start writing
lawyering for 10. most likely already installed on your distro, and in any Writing is a curious word to use when working with a
tool designed to help transform images and
video files, but that’s precisely what Editly
expects you to do. You can use the project to
create appealing videos using solid colours
as you transition from one video to the next,
or use images overlaid with text between
different video clips. You can also add custom
background music to the finished video file or
generate a GIF from a series of images. The
tool additionally supports effects such as blur,
fade-in and so on, which you can use to define
how one image or video transitions to the
next in the final video.
All such operations that you wish to
perform, such as fading out of the first
image and zooming into the next, while music
plays in the background and different text is
written over each image, are written into a
JSON file, which Editly then uses to carry out
your instructions.
For instance, let’s use a couple of images
from a recent holiday and stitch them
Working with JSON files may seem counter-intuitive at first, but it doesn’t take long to get used to. together into a video file:

52 LXF307 October 2023 www.linuxformat.com


Terminal TUTORIALS

{
width: 600, INSTALLATION IS A CHORE
height: 300,
outPath: ‘./images-to-video.mp4’, Unless you’re running a rolling release distribution, such as Arch
defaults: { Linux, you likely have an older, incompatible version of FFmpeg.
transition: null, This leaves you with two options.
duration: 1.2, First is to manually compile a recent release of FFmpeg, which can
}, be quite a cumbersome task, more so because we don’t have room
clips: [ enough to go over the steps in this tutorial. Thankfully, you can head
{ layers: [{ type: ‘image’, path: ‘./ over to FFmpeg’s homepage, where you’ll find detailed instructions
IMG_20190805_130342931.jpg’ }] }, on compiling it.
{ layers: [{ type: ‘image’, path: ‘./ The second option is to retain the version of FFmpeg you already
IMG_20190805_130358474.jpg’ }] }, have available, and grab the static release of FFmpeg from the
], project’s website. This is designed for users who don’t wish to
} go through the trouble of manually compiling FFmpeg. Head to
Here we’ve created an MP4 file using two images, https://johnvansickle.com/ffmpeg/ and grab the version that best
and we’ve defined certain parameters at the top, such suits you. You can opt for the latest 6.0 release or the master branch.
as the width and height. Save this file as images-to- Extract the tarball with the tar xvf ffmpeg-release-amd64-static.tar.xz
video.json5 and then run the editly images-to-video. command. Now navigate into the extracted directory and place the
json5 command. You can now play the images-to- comprising FFmpeg and FFprobe binaries into a directory within
video.mp4 file in your favourite video player. your $PATH.
You can use a combination of image and video files, If you’ve decided to retain the current version of FFmpeg, make
add text overlays and custom music files, and even use sure to first run the which ffmpeg command, and place the
multiple music files for the same video clip. extracted binaries in a directory in $PATH, which will be scanned
To get a sense of some of the operations possible before the directory the contains the installed FFmpeg:
with Editly, open the terminal and clone the Editly $ which ffmpeg
directory from GitHub: /usr/bin/ffmpeg
$ git clone https://github.com/mifi/editly.git $ echo $PATH
$ cd editly/examples /home/linuxlala/.cargo/bin:/home/linuxlala/.local/bin:/usr/local/
You can now read through the different JSON5 files bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/usr/
in the examples directory to get a feel for how Editly local/go/bin:/home/linuxlala/go/bin
works. To see any of the effects in operation, run the $ sudo cp ffmpeg ffprobe /usr/local/bin
editly <filename.json5> command, which creates an
output file of the same name. You can then play the file
to see the effect. for example, uses two video files and a music file to Editly doesn’t
{ create a stitched video file. offer a man page,
but the ‘editly
// verbose: true, Should you run into any problems, you can use the
--help’ command
// enableFfmpegLog: true, Issues section on the project’s GitHub page. Your own provides a quick
outPath: ‘./video2.mp4’, creativity and willingness to experiment are the only introduction to the
defaults: { impediment to transforming your vanilla images and command options
transition: { video clips into stunning visual masterpieces. you can use.
name: ‘linearblur’,
},
layer: { fontPath: ‘./assets/Patua_
One/PatuaOne-Regular.ttf’ },
},
clips: [
{ layers: [{ type: ‘video’, path: ‘./
assets/changi.mp4’, cutFrom: 0, cutTo: 2 }, {
type: ‘title’, text: ‘Video 1’ }] },
{ layers: [{ type: ‘video’, path: ‘./
assets/IMG_1884.MOV’, cutFrom: 0, cutTo: 2
}] },
],
}
This example uses the linearblur transition
and two different video clips to create the
final file. If you only have a couple of video or
image files to stitch together, you can even
work with Editly without bothering with a
JSON file – editly title:’Masterpiece’ vid1.mp4
vid2.mp4 --audio-file-path ./filename.mp3 ,

ENHANCE YOUR TERMINAL-FU Subscribe now at http://bit.ly/LinuxFormat

www.techradar.com/pro/linux October 2023 LXF307 53


TUTORIALS Mapping

KDE MARBLE
Credit: https://marble.kde.org

Mapping made easy


Nick Peers reveals how to navigate the world using a variety of maps
without leaving the comfort of your home PC.

hink maps, and the obvious solution is to flip

T out your phone or web browser and head to


Google Maps. But that doesn’t sit well with
our open source ethos, which is why we’re fans of
OpenStreetMap (see feature LXF276). And what better
way to interact with OpenStreetMap – and a host of
OUR other maps – than through your desktop with KDE
EXPERT Marble (https://marble.kde.org)?
Nick Peers Marble offers far more than just a simple way to
prides himself view maps. Think of it more as a desktop globe with
on his sense of built-in extras, including optional encyclopaedia and
direction but is weather reports, all powered by friendly engines from
not to be trusted OpenStreetMap to Wikipedia. In fact, Marble can go Marble’s default atlas view is rather sparse on detail, but does provide
when he beyond the confines of Earth to cover other planets a good topographical overview of terrain.
announces and even dip into your imagination. It’s even capable of
he’s found a plotting routes from A to B (even Olympus Mons? – (visit https://flathub.org/apps/org.kde.marble), but
shortcut. Expect Ed), although this is perhaps its weakest part. there’s very little difference between them, and in our
to double your experience only the Flatpak version worked correctly.
journey time. Finding your way to Marble For the purposes of this tutorial, though, we’re focusing
You’ll find Marble in all major distro package managers on version 2.2.20, which ships with Ubuntu 22.04 LTS.
– sudo apt update && sudo apt install marble installs When you launch Marble, you’ll see the default map
the version bundled with your Linux distro with the offers a variety of views of the planet, with a classic
minimum of fuss. You can get the latest version topographical view – Atlas – selected by default. You
through Snap ( sudo snap install marble ) or Flatpak can use the controls on the right of the map to zoom in

GET MORE INSIGHTS


Marble’s map can display all from users that are displayed
kinds of useful information – as large red droppers, and
by default you see a compass Wikipedia, which downloads
in one corner, a thumbnail of location-based Wiki articles
the world in the other and a and places them on the map
scale at the bottom. These for easy retrieval.
are known as Info Boxes, and Another two worth
you can toggle them on and considering are Post Codes,
off, plus add more via View > which displays postcodes
Info Boxes. One of the most as an overlay as you move
useful is Elevation Profile, around the map, and Weather,
which works with Marble’s which displays current
routing tools and will be of weather conditions from
particular interest to cyclists. selected weather stations (so
Select View > Online expect to have to zoom out of Add all kinds of additional info to your map – and pick and choose
Services and you unlock the map to see them). Click exactly what you want to see displayed.
10 more widgets. Roll your on the weather icon and
mouse over each one for a choose the station’s name for Globe > Plugins and you can look out for a configuration
description. Two standouts a more detailed summary. remove both Info Boxes and button next to individual
are OSM Mapper Notes, Choose Settings > Online Services from their plugins, which allows you
which displays comments Configure Marble Virtual respective menus, but also to customise them further.

54 LXF307 October 2023 www.linuxformat.com


Mapping TUTORIALS

and out, plus move around the map, but it’s quicker to NAVIGATING KDE MARBLE
use your mouse: zoom using the wheel, then click and
drag to move around. As you zoom into the Atlas, you’ll
see it’s rather basic, and you can’t zoom in that far.
You’ll also see a thumbnail of the map in the top-left
– double-click anywhere inside here to jump to that 1 3 5
place on the map. This thumbnail can also be clicked
and dragged to a new location and is an example of
one of many Info Boxes that can be placed on the map
(check out the box, opposite page, to learn more).
The basic topographical map provides relatively few
landmarks. Click on one to reveal a pop-up providing 2 4
info, including a description (such as National Capital)
and stats: geospatial coordinates, and a factsheet
offering population, country, state and time zone.
Beneath the map is a wealth of more information. To 6
see this, position the crosshairs in the middle of the
screen over an area of interest, then right-click and
choose Address Details to be given its address at
street level, including postal or zip code.
This underlying information can also be used to Search panel Crosshairs
jump to a specific point on the map using Marble’s
1 Use this to quickly locate places across 4 Click and drag the map into position
the entire planet – including street addresses. so your target location appears beneath
search tool. Simply type the place name you’re looking
the crosshairs.
for into the Global Search box and hit Enter. Depending Map view
on how much information you’ve provided, you may be 2 Choose which type of map you want Bookmarks
given several options to choose from – double-click to view from this list – simply click on it to 5 Once created, click a bookmark or
one to centre the map on that position. instantly switch. landmark to bring up a pop-up dialog with
information about it.
You can search at all levels right down to a specific Overview
street – note, only the first six results are displayed by 3 Double-click anywhere on this Navigation controls
default, so be prepared to narrow your search. In most Overview Map Info Box to jump to another 6 If you don’t have a mouse wheel, use
cases, Street Name, Town should be sufficient to get a part of the world. this slider to zoom into and out of your map.
hit. Alternatively, change your position so the place
you’re looking for is within the visible map, then click
the binoculars icon and select Area Search instead. ensure the latest versions are supplied (and to prevent
filling your hard drive with tens of gigabytes of data). As
Switch map you zoom in, therefore, new levels require downloading.
The topographical map is rather basic, but Marble One advantage of the Atlas view is that its lack of detail
comes with plenty of alternatives. Start by switching to means it’s fast and responsive, but be patient with
OpenStreetMap, a global roadmap. Select this, zoom in OpenStreetMap and the blurry map eventually resolves
and you’ll see a more familiar-looking map with obvious itself into detail.
advantages over the topographical map, not least of If you’re on a slow internet connection, it’s possible
which is a greater level of magnification and detail akin to download maps and regions to your hard drive – the
to what you see on OS maps. This means street-level latter option enables you to store portions of the
detail, roads and a far more useful overview. There’s current map for a more responsive experience. The
also a vector-based variant – Vector OSM – at the end simplest way to use it is to position the map to show
of the list, which is mainly suited for HiDPi displays. the area you wish to download, then choose File > By default,
When you move around the OpenStreetMap or Download Region and leave Visible Region selected. Marble displays
Vector OSM, it’s less responsive than the topographical You’ll also see a Tile Level Range option, which refers its maps as
map, particularly when you zoom into a location. That’s to the different levels of detail you want to download. a spinnable
because the maps are all pulled from online sources to The first figure is the current magnification level, so globe, but you
increase it and you’re given an estimate of how many can change
‘tiles’ require downloading and how much space they’ll this by clicking
consume. As you nudge each magnification level up, the Projection
drop-down
the number of tiles (and download size) more than
menu, where
doubles each time. Once you’re happy, click OK.
you’ll see seven
alternative
Plot routes views are
One of the principal uses of the roadmap is to plot available.
directions from A to B, and in theory, Marble should Experiment to
handle this with aplomb. Sadly, it appears the API used see which one
to provide this feature – OSRM (Open Source Routing suits you best
Machine) – is broken. Whenever you plot a car or – for traditional
pedestrian journey using this engine, your route is top-down maps,
Mercator is
Build up a library of favourite (or notable) places with the help of plotted and shown on the map (along with distance and
probably best.
Marble’s bookmarking feature. You’ll never get lost again. estimated journey time), but after searching for a short

www.techradar.com/pro/linux October 2023 LXF307 55


TUTORIALS Mapping

time, you’re told ‘No route found’, which means no by Marble are used for that specific mode – however,
step-by-step directions are provided. see the tip (opposite page) for a word of warning.
Switch to the The only exception is when plotting relatively local
Legend tab bike journeys in the UK – when you select Bicycle as Set up bookmarks
next to Map your preferred means of transport, a different API Having to manually select favourite locations each time
View and you’ll called CS (CycleStreets) is used. This does work as you want to use them is laborious, which is where
find options for advertised – the step-by-step guide (below) reveals Marble’s bookmarks come into play. These work as
customising how to use Marble to plot routes. Ultimately, though, you’d expect, enabling you to store places for easy
the look of the
it’s not going to replace your phone’s route planner. retrieval later – whether when selecting points of travel
currently
Beneath the Get Directions button are several more or just to mark them so they’re easy to find.
selected map
as well as buttons. To the left of the Preview button is Save, for Let’s start with your home: once located on the map,
viewing a legend storing the route on your hard drive in KML format, position the map so the crosshairs are over your house
explaining which can be restored later using Open to its left. or the street where you live, then choose Bookmarks >
the various Click the green + button and you can add one or Set Home Location. You can return here by clicking the
elements shown more stopping points to your route. There’s a Reverse Home button above the magnification slider.
on the map Route button to generate directions for the journey The Home bookmark is simply a convenient means
itself, such as back and a handy Clear Route button to allow you to of jumping to your home location with a single click.
roads, and types start again. Finally, a Settings button enables you to Other bookmarks go further, so why not create
of buildings and
configure the currently selected mode of transport by a second bookmark pointing to your home location
businesses.
selecting which online and offline services supported now? Right-click on it and choose Add Bookmark. The

PLOT A ROUTE IN MARBLE

Set starting point Set destination and search


1 Make sure OpenStreetMap is the selected map, then 2 Repeat the process using the B box to choose your
switch to the Routing tab, where you’ll see A and B boxes, which destination. Next, choose your method of travel: car (fastest or
need to be filled with your starting point and destination. You can shortest), bicycle or pedestrian, remembering that only UK bike
enter an exact address or a partial address as a search term, or journeys provide step-by-step instructions. Once done, click Get
click the down arrow to select an existing bookmark or the Directions. You are quickly shown the route on the main map but
current location on the map. must wait a few moments while directions are calculated.

Preview car journeys Conduct a bike journey


3 If ‘No route found’ shows up, you need to manually inspect 4 If you selected Bicycle, then a route should be
the route yourself – you are give a summary of the distance and generated. You’ll see a play button, which basically enables
estimated time, but must zoom into the map to follow the blue you to preview the route. Clicking this sees you move along
line from start to destination. You can also click on the map to add the map automatically, enabling you to confirm the route is a
new waypoints, or click and hold Ctrl as you drag to alter the start good one. Alternatively, click on each direction to jump to the
or end point. relevant point on the map.

56 LXF307 October 2023 www.linuxformat.com


Mapping TUTORIALS

CHANGE YOUR VIEW


You’ve seen how Marble as some more genuinely
supports more than one type useful maps, such as the
of map when examining the Public Transport and Hike and
options under the Map View Bike maps. Simply click Install
tab. We cover the basic next to any that take your
topographical map and both fancy, followed by Open once
roadmaps in the main copy, they’ve downloaded. Note
but others range from the that maps are organised by
interesting to the whimsical, location (such as Earth or
including a couple of satellite Moon), so use the drop-down
views, historic maps and even menu beneath Map View to
maps recording rainfall and switch between them.
temperatures. Each map If you want to use other
supports different levels of map views, you either need to
magnification, so be prepared ‘create’ your own as outlined Over 40 additional map types spanning different topics can be added
to zoom further out. in the main copy through the to Marble by selecting File > Download Maps.
You can add additional File > Create a New Map
maps via File > Download dialog, which creates format via File > Open. You’ll format, then extract the
Maps – over 40, in fact, permanent map themes find some examples at contents; but be warned –
including maps of various using online sources, or use https://download.geofabrik. some, like Europe and North
planets and moons, as well offline maps in the OSM de (choose the .osm.bz2 America, are incredibly big).

bookmark’s name is the street address by default, but as ZIP files, then extract them before choosing File >
you can edit this, plus add a description, and file the Open to open them in turn.
bookmark into your choice of folder to create another Railways and roads offer nothing you won’t find Sadly, it appears
layer of organisation. Once created, a star appears with from the roadmaps, but other options – particularly only two of
the bookmark title on the map – click it to display the points of interest – do add items of new interest to Marble’s route-
Place Information pop-up, which includes geospatial your map. The British example, for instance, is planning back-
coordinates and the description you entered. To jump staggering in the sheer volume of local landmarks that ends currently
work – partially
to a bookmark, select it from the Bookmarks menu, have been added, but sadly not all have been labelled.
or fully. We
where you’ll also find a Manage Bookmarks option that You can install multiple files at once – they sit on top
tested the
enables you to tweak (and remove) bookmarks. of each other until you close Marble, at which point other services
they’re removed, and you need to reload them again. – including
Add more details registering for
You can also overlay additional information over your Create your own map and providing a
maps thanks to Marble’s support for files created in the If you’re not happy with any of the maps on show, MapQuest API
GIS ShapeFile format. Start your search for free files at why not create your own? Choose File > Create A New key – but none
https://mapcruzin.com – click Maps on the navigation Map to be shown a choice of three options: Web Map had any effect.
banner to see what’s available. We recommend Service (WMS) is the simplest option to follow. First It’s a testament
to Marble’s
browsing Free World Shapefiles By Country, where you you’ll need a suitable WMS URL – for example, go to
ageing status
can find such overlays as buildings, natural features, www.gebco.net and navigate to Data & Products >
and apparent
railways, roads and points of interest. Download these GEBCO Web Services > Web Map Service to obtain the lack of support.
URL. Input this into the URL box and click Next.
You’re shown a list of available maps – select one
and click Next. Provide a suitable map title, name and
description, as well as a preview image if it’s not been
provided, then click Next again to set up the Legend
tab, which allows you to choose what elements users
can show – there’s no need to provide a different
Legend image. Finally, click Next to preview your map
and – if you’re happy with it – click Finish. Once created,
the map is accessible via the Map View tab.
A good source of WMS URLs can be found by
visiting https://directory.spatineo.com – not all work,
but many do (including those offered by the British
Geological Society). You can browse by location or
Choose Settings > Configure Marble Virtual Globe > View to switch search for specific keywords, then copy and paste the
from kilometres to miles and to tweak other options. URL to see if it’s accepted. Happy map hunting!

FIND LXF MORE EASILY… Subscribe now at http://bit.ly/LinuxFormat

www.techradar.com/pro/linux October 2023 LXF307 57


TUTORIALS Manage your photos

DIGIKAM
Credit: http://digikam.org

Manage your photo


collection with finesse
Mike Bedford explains how DigiKam enables you to manage your photos,
finding what you’re looking for with the most powerful of tools…

hen you have a collection

W of photos running into the


thousands, finding what you’re
looking for can be like seeking the
proverbial needle in a haystack. Certainly,
storing your photos in a sensible folder
OUR structure helps, but not always. For
EXPERT example, it could take some time to track
Mike Bedford down all your photos that include a sheep.
wishes he’d And it gets worse. With digital photos
got serious costing nothing to take, even when you
about photo find the scene you had in mind, you could
management discover you have half a dozen alternatives,
some time ago, differing slightly in exposure, focusing or
as tagging years’ framing. You probably appraised them
worth of photos when you first took them, but picking the Adding keywords, which can be arranged hierarchically, is just one of many ways
is going to be best several years later involves carefully you can tag your photos to simplify searching.
no easy job. But viewing them all again. Solving these
he’s confident common problems, and many others, is made easy way through your existing collection of photos. We
that it’ll be with a photo-management package, and here we show recommend starting with the most recent and working
worth the effort. you how. We’re looking at DigiKam (www.digikam.org), your way back from there. Whether you’re tagging a
which is one of the most respected free open source handful of photos you took the day before, or starting
photo-management tools, but others also have an the Herculean task of doing so on the last 10 or 20
enthusiastic following, and the principles are similar. years of photos, the principles are the same.
Having done that, you can gain the most benefit
Our instructions
Workflow and installation from using DigiKam, so we’re also looking at using
involve There’s no such thing as a free lunch, and this certainly the tools provided for managing your photos. That
configuring applies to using photo-management software – you includes viewing and searching, but that’s only a start.
DigiKam to only get the benefit from using this sort of software if We’re also delving into the other benefits of photo
employ a simple you put in some effort up front. Let’s return to our management on offer, including photo editing, with the
hierarchy that previous example of looking for photos containing option of batch manipulation, photo sharing and more.
has folders and sheep, but we want to restrict our search to shots that As a final comment before addressing the first of
subfolders in a are well composed, focused and framed. Even with our two main themes, we should mention installation.
single album. DigiKam, you’re only going to find these if you’ve You’ll probably be able to install DigiKam from your
However, it’s
previously tagged those photos that show a sheep distro’s repository, but if our experience with Ubuntu
also possible to
have multiple
with the word ‘sheep’, and have given your photos 22.04 LTS is typical, the installed version will be
albums and, some sort of quality score. seriously out of date. To make sure you get the most
going yet Our first bit of advice, therefore, is to add this sort of recent version, which was 8.1.0 as this was written, we
further up the information to your photos as soon as possible after suggest you use the instructions provided at https://
tree, you can you’ve taken them. It’s easier this way, because you fostips.com/install-digikam-ubuntu-linux-mint.
have multiple don’t have to rack your brain to remember exactly However, beware of using the Flatpak option, as we
collections, where a photo was taken, for example, and it also did at first, because that causes DigiKam to fail to
each of which means you aren’t creating an ever-growing backlog. recognise most of your folders – apparently a known
can contain However, if you’re starting from scratch with photo issue, and one that we’re told also manifests itself if
several albums.
management, you have to bite the bullet and work your you use the Snap approach. Instead, use the AppImage

58 LXF307 October 2023 www.linuxformat.com


Manage your photos TUTORIALS

method, although we suspect the Ubuntu PPA method


should work properly, too.

Setup and tagging


When you run DigiKam for the first time, you’re taken
to the setup wizard. In most cases, we suggest you
accept the default settings; if you change your mind,
you can easily tweak your settings later. About the only
step that requires you to provide information that is
specific to you is identifying where you store photos.
In all probability, you’ll specify a top-level folder that
contains several levels of subfolders – for example,
first for year, and then for trips or assignments during
that year. When you’ve gone through all the setup
steps, DigiKam starts and you’re eventually taken to an
opening screen. This has a navigation pane to the left,
which shows the folders in your photo collection, and a
viewing pane on the right, showing images in the
selected folder using the thumbnail layout.
At this stage, you can navigate and view your
photos, but to make the most of DigiKam, you need you can remember, or guess correctly, some of the If your camera
to tag your photos in various ways. This is laborious, words or phrases you used. or phone didn’t
record geolocation
especially if you have a lot of photos, and you’ll almost With images displayed – and you could use the data with a photo,
certainly need to do this in batches. However, here are Preview or Table tabs as an alternative to Thumbnails – you can add it by
some of the main ways to attach various types of click on an image you want to tag to select it. Now, in clicking on a map.
additional information to your photos. In general, we the column of tabs on the right, choose Captions. This
won’t pass comment on the relative usefulness of the name is a bit misleading, because it allows you to add
different types of information, although you should more than a caption both in the initial Description tab
note that some, such as keywords or star ratings, can of the Captions dialog and in its other tabs. The
easily be used in searches. On the other hand, freeform Description tab enables you to add a Title and/or a We introduced
tags, such as captions or comments, are only useful if Caption, both of which are freeform text, although DigiKam
as a photo
we’re not sure why you’d want both.
management
Further down, you can assign a
package, so it’s
Rating, from zero (unassigned) to not surprising
five stars, this being a subjective that the whole
view of the quality of the photo, and of this article
two initially odd-looking tags called assumes that
Pick Label and Colour Label. Pick you’re working
Label can be set to Rejected, with your
Pending or Accepted, and is collection of still
probably mainly of interest to photographs.
However, if you
commercial photographers. The
also do video
Colour Label can be used however
photography,
you want, so you could, for example, you’ll be
set some of the nine available interested
colours to various projects you’re to know that
working on. The Information tab DigiKam can
Vast amounts of information is available for each photo – here DigiKam is displaying enables you to add details, including also handle
a luminance histogram. a list of people in shot, photo credit, movies.

FACE RECOGNITION
We can’t help but think that Once you’ve set up facial some time but, eventually, To cut a long story short –
DigiKam’s face recognition recognition in DigiKam, you DigiKam tells you that it’s and you should really read
feature is the first step in can search for named people completed its search. Now up about this further in the
more general image analysis. in just the same way as any click on People at the top DigiKam manual – you might
If that’s the case, it might no other keyword, as described of the left-hand area and a have to identify a person in a
longer be necessary to add in the main part of this zoomed-in portion of all number of photos before they
keywords to photos, which tutorial. First, click on the images containing faces are recognised automatically.
would be a huge benefit. People tab at the left of the appears on the right. Move However, with sufficient
However, face recognition is screen and then click on the pointer over a face and training, DigiKam should be
already a part of DigiKam, so Scan Collection For Faces. when it asks ‘Who is this?’, able to select photos using
here’s the low-down. This will probably take quite provide the person’s name. people’s names as keywords.

www.techradar.com/pro/linux October 2023 LXF307 59


TUTORIALS Manage your photos

copyright notice, a textual geographical location (we’ll


see later how to select geolocation data), and more.
DigiKam doesn’t Finally we come to the Tags tab, where you can add
move photos keywords to help you find the photo at a later date. You
around, so can enter as many tags as you want here, and they’re
you’ll be able added to the list of available tags for possible use in
to continue other photos, and selected as one that applies to your
backing up or selected photo. However, if you don’t want to apply it to
archiving your the current photo, click on the tick to remove it. Note
photos from also that tags are hierarchical so, having created a tag,
their familiar
if you want it to appear under another tag, just drag it
folders, just
to that tab and, when asked, select Move Here. For
as you’ve
always done. example, this could allow you to create a tag called
However, all Beach under which you have the tags Sandy and
the information Rocky. When you’ve finished adding information
you provided to your photo, click on Apply. Each time you see If geolocation data is available, you select photos by browsing a map,
while tagging that photo from now on, you also see some of the zoomed in to your area of interest.
your photos in information you added, the extent of which depends on
various ways is whether you’re using the Thumbnails, Review or Table tagged or not. When DigiKam was first set up, you
stored in four tabs, the latter providing the most information. were presented with a screen showing your photos in
database files,
If a photo was taken on a smartphone, it probably the default format, this is called the Album View and
which you also
has geolocation information embedded in it, and the specifically the Thumbnail tab, which is where we start.
need to back
up. These are same is true of some cameras. In that case, DigiKam The Thumbnails tab of the Album View shows a
stored in the recognises the data. However, if that’s not the case, navigation pane on the left, and this can be used to
top-most folder you can add the data manually. With one or more select any folder in your album. To the right, thumbnails
in your album. photos selected, choose Edit Geolocation from the of the photos in the selected folder are displayed,
Item menu. The Geolocation Editor appears, showing a alongside their filename, much as they would be in
map at the top, your selected photos at the bottom most file managers, but also visible is the time and
and, so long as the Geolocation Editor’s Details tab is date, plus any star rating, title, keywords and perhaps
selected, the latitude and longitude (initially blank) at other tags. Note that the size of the thumbnails is
the right. Navigate to the position of your photo on adjustable using the slider at the bottom – we were
the map, right-click on the spot, and select Copy able to display between six and 35 on screen. By
Coordinates. Now right-click on the thumbnail of default, much the same information is presented in
the image you want to geolocate and select Paste the Table tab, although you can configure it by adding
Coordinates. The latitude and longitude are filled in columns with additional information. The Preview tab
under Coordinates, and a thumbnail of the image doesn’t provide as much information, but the display
appears at its designated location on the map. comprises a strip of thumbnails at the top and a
Continue this way until you’ve added coordinates to resizable preview of the selected image at the bottom.
You can narrow each of the images visible in the Geolocation Editor, Whichever of the tabs you use, lots of additional
down your and click on Apply before exiting the editor. information is available from the tabs at the right of the
selection of photos screen. Between them, the Properties and Metadata
by specifying Viewing for pleasure tabs present a vast amount of information, gleaned
labels. Here we’ve
told it to show only
As we turn to DigiKam’s opportunities for viewing and from the file and image data itself, and the EXIF data
three, four or five- searching photos, we’ll start with the viewing options that was written to the file when the photo was taken.
star images. as this functionality is available for all your photos – Included here, for example, are file sizes, owners and
permissions, image pixel sizes, aspect
ratio and colour mode, plus camera
information and settings, such as the
model, aperture, shutter speed, focal
length, ISO speed and exposure
compensation. Turning to information
that’s commonly only visible in image
editors, by selecting the Colours tab,
you can see various histograms that
show the range of tonal values in a
photo. Having seen how to add
geolocation data to photos, you won’t
be surprised to learn that you can view
geolocated photos on a map, available
on the Map tab at the right – also take
a look at the Map tab at the left of the
screen. And finally on our whistle-stop
tour of viewing your photos, take a
look at the Timeline tab on the left. In
addition to the usual thumbnails, this

60 LXF307 October 2023 www.linuxformat.com


Manage your photos TUTORIALS

DOWNLOADING & EDITING


DigiKam provides facilities for still recognised. However, do offer as much functionality as providing that missing
importing photos from your read up on DigiKam’s import some dedicated editors, such functionality. If you’ve never
camera, and while it claims tool – we wouldn’t want you as GIMP. However, if you don’t used a batch editor before, it
some benefits over the to miss out on something you currently use a photo editor, enables you to perform an
standard approach, and some may find useful. having the functionality at operation, such as down-
people might like the idea of Some of the issues hand in DigiKam might just sampling or rotating, on a
DigiKam being a one-stop- regarding DigiKam’s photo- provide the opportunity to whole group of photos. Do
shop, we think many of you editing facilities are similar, experiment. Alternatively, remember, though, that unlike
will continue to use your time- although there’s a couple of perhaps you already use a some photo management or
honoured method. After all, reasons you might consider simple image-editing tool editing packages, any
each time you start DigiKam, using DigiKam for editing. but it doesn’t offer batch changes that DigiKam makes
it scans your album, so any The built-in photo editor is processing. Again, DigiKam’s to your photos are actually
photos added externally are pretty good, but it doesn’t editor could be beneficial by made to the original files.

provides a histogram showing how many photos were whichever photos are selected. So, an easy way to
taken on each day, week, month or year. Conceivably, select the photos you want to export is to first carry
this might just come in useful on occasion. out a search using your relevant criteria. Needless to
say, this is much quicker than selecting them by hand
Finding your photos outside of DigiKam. Export is available in the menu of
Our penultimate topic is to look at finding specific that name and the options are extensive, running to 16
photos when you’ve got a collection of hundreds or platforms, including Dropbox, Flickr, Google Drive and
thousands of shots. We’ve already touched on the Map Twitter. And as a parting shot on exporting – this time
tab at the left of the screen, and this does, indeed, in the very broadest sense of the word – and bearing in
provide a means of searching for photos by their mind that it works with your selected photos following
location. However, we’ve not yet seen how to make use a search, you might be interested in the Print Creator,
of the star rating, keyword, title and other data that you which can be found in the Tools menu.
add to your photos over time. One of the easiest This completes our overview of DigiKam, but we
searches is by star rating. You can apply this filter – and have to admit there’s so much more that we haven’t
also Pick and Colour Labels – in the Labels tab at the been able to cover, but which you might find useful. Our
left of the screen. Note that you can search for more recommendation, therefore, is that you first try out
than one rating, so if you want to find all photos that what we’ve covered in this tutorial, but then move
are rated four or five stars, just select those two on to trying out other things that sound interesting.
options. Similarly, the Tags tab at the left of the screen However, because a few of DigiKam’s tools can actually
permits you to view any photos containing one or more alter your photos permanently, before you start using
tags. However, for more complicated searches, you these advanced facilities for real, we suggest that you
need to head over to the Advanced Search tool that create an album containing copies of just a few of your
you can find in the Tools menu. It provides the option of photos that you can experiment with in safety, knowing
specifying multiple criteria, all of which, or any of which, that your original photos are all stored separately and
have to be met. So, for example, you could search for out of harm’s way.
photos with a particular word in their titles, are tagged
with specified keywords, and have a specified
minimum star rating. Finally, on the subject
of searching, you probably noticed that, even before
you started adding keywords, there was already one
called Faces. This is concerned with using DigiKam’s
facial recognition feature and, while named faces are
selected in just the same way as other keywords, it first
needs to be set up (see box on page 59).

Take it online
Our final main topic concerns exporting photos to
various online destinations, including social media and
file-sharing sites. You might just wonder why you’d
want to do that from within DigiKam rather than by
your existing tried-and-tested method. And while for
some there’s an appeal to managing everything photo-
related from a single package, there’s a more tangible Although more fully-featured photo editors are available, DigiKam’s editing facility will be
benefit, too. The export functionality exports sufficient for many users.

IMPROVE YOUR LINUX SKILLS Subscribe now at http://bit.ly/LinuxFormat

www.techradar.com/pro/linux October 2023 LXF307 61


BACK ISSUES

BACK ISSUES MISSED ONE?


ISSUE 306 ISSUE 305 ISSUE 304
September 2023 Summer 2023 August 2023

Product code: Product code: Product code:


LXFDB0306 LXFDB0305 LXFDB0304

In the magazine In the magazine In the magazine


Discover how Don’t let Big Run your own
AI can (and can’t) help with your Tech be in control of your AI and take over your world with
coding, plus add Pi-style GPIO to documents – find out how to run local open source machine learning,
your PC, access your home server your own office apps in the cloud. discover the diverse delights of
from anywhere, and write your own Plus, learn how Linux certification BlendOS, and learn all about AMD,
text adventure and Breakout-style can kick-start your career, step Intel and Apple’s different takes
games. Also, Adminsteria returns back in time with our look at the on CPU design. Plus, we have an
with news and reviews for sysadmin evolution of coding, and read our in-depth interview with Collabora’s
types, we take an in-depth look recommendations for the best Michael Meeks, a Roundup of
at how Azure stacks up against open source CAD packages, not official Ubuntu spins, and tutorials
AWS, there’s a Roundup of media- forgetting our usual packed tutorial, on everything from restoring old
creation distros, and plenty more… review and Raspberry Pi sections. photos to coding a text adventure.

ISSUE 303 ISSUE 302 ISSUE 301


July 2023 June 2023 May 2023

Product code: Product code: Product code:


LXFDB0303 LXFDB0302 LXFDB0301

In the magazine In the magazine In the magazine


Trim down your Master hacking Save your old
Ubuntu installation for a stripped- with Kali Linux, discover the artful PC by installing Linux Mint on
back, super-slick and ultra-fast ways of Stable Diffusion, try a taste ageing hardware. Also in this issue,
Linux experience. Plus, discover of the anything-but-plain Vanilla OS we explore the programming
which beginner programming and find out what’s new in the language leaderboard, look at
language is the best, read all about online office world. Plus, pick up a keeping fit the open source way,
OpenSUSE’s ALP distro, and find whole bunch of new skills thanks to feature a Roundup of lightweight
out why Podman might be better tutorials on speeding up text-based desktops and spoil you with
than Docker. And don’t forget to tasks, rescuing data from floppies, tutorials on everything from image
try our tutorials on terminal-based repairing images in GIMP and much processing and music streaming
to-do lists, searching file contents, more, and learn which is the hottest to programming a 3D chess game
making mazes in C, and loads more. firewall distro in our Roundup. and controlling your DIY robot.

To order, visit www.magazinesdirect.com


Select Single Issues from the tab menu, then select Linux Format.

Or call the back issues hotline on 0330 333 1113


or +44 (0)330 333 1113 for overseas orders.
Quote the product code shown above and have your credit or debit card details ready.

62 LXF307 October 2023 www.linuxformat.com


UK readers
USA? EU? THE MOON?
*
turn to
p16

Don’t wait for the latest issue to reach your local store –
subscribe today and let Linux Format fly straight to you.
Faster, cheaper and with DRM-free archive access!

3 GREAT
WAYS TO
SUBSCRIBE
Print, digita
l-only,
and print+d
igital
bundles!

USA REST OF THE WORLD EUROPE


From $132 From $132 From €100
For 13 issues For 13 issues For 13 issues

IT’S EASY TO SUBSCRIBE!


Visit www.magazinesdirect.com/linux-format
Call +44 0330 333 1113
Lines open Monday-Friday, 9am-5pm, UK time.
*We don’t actually deliver to the Moon. Yet.

www.techradar.com/pro/linux October 2023 LXF307 63


TUTORIALS Classic language

FORTRAN
Credit: https://fortran-lang.org

FORTRAN – the first


high-level language
It might have been the world’s first high-level language, but
Mike Bedford discovers that FORTRAN is still alive and well today.

hen FORTRAN was first

W conceived, there were barely


any high-level languages, and
certainly none that became widely
known. With such languages now
virtually universal, we need to remember
OUR that high-level languages were designed
EXPERT to ease the job of a programmer.
Mike Bedford Previously, code was written in a
discovered that computer’s native instructions,
even though it’s which were defined by the computer’s
very different hardware. Using a high-level language, It’s largely forgotten today, but the IBM 704
from modern it became possible to use instructions scientific computer played an important
languages, it’s that were closer to how humans would role in kick-starting the FORTRAN project.
easy to get up to define the solution to a problem.
speed with the Productivity gains, it was argued, would
original FORTRAN follow. Programs could also be transportable removed from later versions that were intended to be
as it has just 32 between different computers, although this wasn’t a hardware independent.
instructions. consideration when designing FORTRAN, because the If you want to try your hand at coding in FORTRAN
language was initially designed specifically for the IBM 1957-style, you’re not going to find an IBM 704
704 computer. FORTRAN compiler. However, with the exception
The original FORTRAN was introduced in 1957 and of removing some of the original FORTRAN’s
had just 32 instructions, a far cry from most of today’s 704-specific instructions, each version of FORTRAN
If you catch languages. What’s more, several of these instructions retained most, but not all, of the instructions of its
the FORTRAN
were tied up to the IBM 704’s hardware, so they were predecessors for backwards compatibility. So, you can
bug, you might
be interested
to learn about
the open FORTRAN AND EXASCALE COMPUTING
source LFortran
project. Put The Top500 list, published twice that of top-end gaming PCs – Lawrence Livermore National
simply, it’s an each year, identifies the world’s choosing an appropriate language Laboratory, has a design speed
interactive fastest 500 supercomputers, and is important in making the most of twice that of Frontier, while
version of currently shows the 8,699,904- it. So, it’s interesting to note that Aurora, at the Argonne National
FORTRAN core Frontier, at the DOE/SC/Oak pretty much everything you read Laboratory, is expected to exceed
that enables
Ridge National Laboratory in the about Frontier’s software refers to that 2EFLOPS figure. And, while
you to try out
ideas, getting
USA, in the top spot. It’s the only just three languages: C, C++ and not much has yet been said about
immediate computer ever to have exceeded FORTRAN. And this isn’t a one- El Capitan’s supported languages
results, without 1EFLOPS, that’s one quintillion off. Since the first ever stored (but we can guess), like Frontier,
having to (1,000,000,000,000,000,000) program computer, we’ve waited Aurora will be programmed in C/
compile any floating point instructions per 74 years for the first exascale C++ and FORTRAN. Surely there
code. In this second, as measured using the computer, but others are close can be no better testimony to this
respect, it’s LINPACK benchmark. on its heels. For example, the language of the ’50s than it
CREDIT: IBM

been likened to With so much performance at forthcoming El Capitan powering the world’s most
Python, MATLAB your disposal – 100,000 times supercomputer, housed at demanding applications in 2023?
and Julia.

64 LXF307 October 2023 www.linuxformat.com


Classic language TUTORIALS

use a more modern compiler, but only use the original example, the FORMAT
instructions, and avoid using any that have been associated with the
deleted more recently. Perhaps the most well- READ statement tells it
respected FOSS compiler is GFortran (GNU Fortran), to expect an inter value
available in the main repositories. Instead, if you want of, at most, two digits and
an immediate way of trying out some FORTRAN code, the FORMAT associated
perhaps before moving to a locally-installed solution, with the last PRINT
use the online Try It Online resource (https://tio.run), statement tells it to print
which enables you to see the output from your code it as a six-figure integer.
immediately, and actually uses the GFortran compiler. The IF statement is an
As a first example, we suggest you try, and perhaps arithmetic IF statement,
then modify, the following code, which is written in the compared to the logical
original version of FORTRAN. Note that we deliberately IF statement that we
kept an error in this code, as you’ll discover if you input mostly use in other
a value of 10 or more, so you might like to correct that. languages, and which
It displays the factorial of a number – a number’s didn’t appear until a later
factorial being the result of multiplying together all version of FORTRAN.
positive numbers up to and including that number. By An arithmetic IF
definition, the factorial of zero is 1, and there’s no such branches to one of the
thing as the factorial of a negative number. three lines, depending on
READ 30, N whether the result of the
30 FORMAT (I2) expression in brackets is
IF (N) 40, 60, 70 negative, zero or positive,
40 PRINT 50 respectively. A DO loop is
50 FORMAT (17HCAN’T BE NEGATIVE) terminated by a
GOTO 110 CONTINUE statement, the line number of which is The team at
IBM that was
60 NFAC = 1 specified in the DO statement. Only capital letters responsible
GOTO 90 could be used originally, although most compilers for developing
70 NFAC = 1 now accept lower-case letters. The code is fixed FORTRAN was led
DO 80 I = 1, N format. A C in the first column indicates that the line by John Backus, a
name you might
NFAC = NFAC * I is a comment, an optional line number can appear in
recognise from
80 CONTINUE columns 1-5, any character in column 6 indicates that the Backus Naur
CREDIT: Wikimedia.org/Leonardo da Vinci National Museum of Science and Technology, Milan, CC BY-SA 4.0. IBM

90 PRINT 100, NFAC the line is a continuation of the previous line, and the Form notation.
100 FORMAT (I6) actual statement appears in columns 7-72.
110 STOP To learn more about the original FORTRAN, take a
END look at the IBM Programmer’s Reference Manual, at
A few comments here will help you understand https://bit.ly/lxf307manual.
the code. In 1957, computers generally didn’t have
terminals like VDUs or teletypes, so the READ The ongoing journey
statement would have read from a punched card. If Because the original FORTRAN had just 32
you’re using Try It Online, enter the value to be read – instructions, several of which were tied up with the IBM
which is the number for which the factorial is to be 704’s unique hardware, it’s not particularly surprising The original
calculated, and which would have been read from a that FORTRAN was expanded over the years. The first version of
BASIC, which
punched card – in the Input area. By default, all variable extension went by the name of FORTRAN II, it was still
differed
names starting with I, J, K, L, M or N are considered intended exclusively for use on the 704, and it added
significantly
integers; variables beginning with any of the other support for subroutines and user-defined functions, from many
letters are real. READ and PRINT statements refer to a surely major drop-offs for the original FORTRAN, plus of the more
FORMAT statement by its line number, which dictates complex numbers. There was also a FORTRAN III, but it modern
how the data should be interpreted or displayed. For was never publicly released. versions and
The first really important upgrade was FORTRAN IV. which was
It was supported on a much wider range of computers, introduced
and it became the de facto language for scientific, in 1964,
engineering and mathematical applications for several was heavily
influenced by
years. It appeared in 1962 and – if we skip FORTRAN
FORTRAN II.
66, which was essentially the same as FORTRAN IV,
In fact, it had
but named in recognition of it being adopted as an even fewer
ANSI standard in 1966 – it remained unchallenged until statements, but
FORTRAN 77. The main way in which FORTRAN IV many of the
added to FORTRAN II was its introduction of the logical drop-offs were
IF statement, an example of which is IF (N .EQ. 10) I = I those FORTRAN
+ 1 . Note that, unlike most more recent languages, the statements
relational operators were not symbols such as =, >, < that were
and so on, but two-letter codes surrounded by periods. closely related
to the IBM 704
Perhaps the best way to illustrate FORTRAN’s maturity is to point out So, for example, the relational operator in our previous
hardware.
that the IBM 704 on which it was first run used valves, aka tubes. example was ‘less than or equal’ and others, the

www.techradar.com/pro/linux October 2023 LXF307 65


TUTORIALS Classic language

meanings of which are obvious, are .NE., .


GT., .GE., .LT. and .LE.. These could be
You can add combined with the logical operators .OR., .
spaces pretty AND. and .NOT.. However, there was no
much at will in
concept of an IF … THEN … ELSE structure,
FORTRAN code,
despite blocks having already appeared in
to increase its
readability. A ALGOL. The only statement in FORTRAN IV
consequence that involved the execution of a block of
of this was the code was DO … CONTINUE. The other main
addition of new feature provided by FORTRAN IV was
periods before the replacement of the original FORTRAN’s
and after two- support for the IBM 704’s mass storage
letter relational devices, with more general support for mass
operator storage devices. If you get bored with the
codes to avoid
original FORTRAN, but still want some Further evidence that the world was very different when FORTRAN was conceived:
ambiguity. programmers had to carry around huge stacks of punch cards containing their code.
experience with a classic FORTRAN, by
For example,
without periods which we mean a version that’s more than
or spaces, half a century old, FORTRAN IV is your obvious choice. 100 FORMAT (I2, XXXX, I6, XX, F11.9, X, A1)
a logical IF The IBM System/360 FORTRAN IV Language manual 200 CONTINUE
statement is at https://bit.ly/lxf307f1966. And here’s some code 210 STOP
starting IF you could use as a first example: END
(A.EQ.B) GR = (1 + SQRT (5.0)) / 2 Before delving into the code, we need to explain
could be NMARK = 78 what it does. First it calculates and prints the Nth
misinterpreted PRINT 10 Fibonacci number, for values of N from 1 to 30. The
as an arithmetic
10 FORMAT (39H N FIBONACCI GOLDEN RATIO first two Fibonacci numbers are defined as 1 and 1, and
IF statement
WITHIN 0.001%) all subsequent numbers are the sum of the previous
starting IF
(AEQB) .
NFIB1 = 1 two. So, the first few Fibonacci numbers are 1, 1, 2, 3, 5,
NFIB2 = 1 8, 13 and 21. Next, for each N, we also calculate and
DO 200 N = 1, 30 print an approximation to the Golden Ratio, and
IF (N .GT. 2) GOTO 50 indicate, with an N or Y, whether it’s within 0.001% of
NFIB = 1 the actual value. The Golden Ratio – if you’re unfamiliar
GOTO 60 with it, we encourage you to read up about it; it’s quite
50 NFIB = NFIB1 + NFIB2 interesting. To return to our Fibonacci numbers, the
NFIB1 = NFIB2 ratios of pairs of successive Fibonacci numbers are
NFIB2 = NFIB ever closer approximations to the actual value of the
60 GRAPP = REAL (NFIB) / REAL (NFIB1) Golden Ratio.
ERR = ABS (GR - GRAPP) / GR * 100 A few comments about the code are now
IF (ERR .LT. 0.001) NMARK = 89 appropriate. The main difference between this code
PRINT 100, N, NFIB, GRAPP, NMARK and a program written in the original FORTRAN is
the use of the logical IF statement. The first line
calculates the actual value of the Golden Ratio.
THE FIRST HOME COMPUTERS Although FORTRAN IV doesn’t support character
string variables, an integer variable can hold an ASCII
Today you can run FORTRAN, or just about any language for that value and, if this is then printed using an A designation
matter, on your Linux PC. However, if we shift our terminology from in the FORMAT statement, the associated character is
“PC” to “home computer”, those with a long memory will think of the printed. That variable is NMARK, and the ASCII values
home computing boom of the early ’80s. And pretty much all of for N and Y are 78 and 89 respectively. We use several
those computers offered a single built-in programming language: functions, including SQRT and ABS, but of particular
Basic. Interestingly, though, FORTRAN also got a look in on some of note is REAL in line 60. This is necessary because
CREDIT: Wikimedia.org/Arnold Reinhold, CC BY-SA 3.0

the earliest microprocessor-based computers. we’re dividing two integers and, had we not used the
Personal computers, in the broadest sense of the word, first REAL function, it would have given an integer result.
appeared in the early ’70s, many based on the 1974 8-bit Intel 8080 We’re not going to discuss all the successors to
processor, and its close relatives the Intel 8085 and the Zilog Z80. FORTRAN IV/66 in the same detail – after all, there
They were expensive, so were commonly used for early business have been quite a few – but we will summarise the
applications, but also attracted well-heeled hobbyists. Even in those main features of the more important versions.
early days, while there was a lot of diversity, standardisation also FORTRAN 77 added the ELSE option to the IF
came to the fore in the form of the CP/M operating system. From statement, and also introduced the concept of blocks,
1977 to the late ’80s, CP/M appeared on a whole range of machines, but only for the IF statement. A character data type
albeit sometimes only if a co-processor was added. While most of was added for the first time. Further block structured
those computers were from largely forgotten names, other support was added, over time, to include the DO
companies, including Acorn, Amstrad, Atari, Commodore and Tandy, WHILE and CASE constructs. With the introduction of
also sold CP/M-based machines. It mostly didn’t come as standard, Fortran 90 – and, no, that’s not a typo; with the onset of
but when other home computer users were programming in Basic, the 1990s, FORTRAN became Fortran – the
FORTRAN allowed CP/M users to embrace a superior language. requirement to put line numbers and statements in
specific columns was relaxed. It also allowed a mix of

66 LXF307 October 2023 www.linuxformat.com


Classic language TUTORIALS

upper-case and lower-case characters, the former


requirement to use capitals only being a throwback to
the punch card era. Fortran 90 also allowed recursion
and it permitted arrays to be operated on as a whole,
instead of operating on single elements in a loop or
nested loops. Object-orientated processing came with
Fortran 2003, and with the onset of Fortran 2008,
support was provided for parallel processing. In
passing, we should also mention Fortran 95 and
Fortran 2018, but we’ll pass the comment – perhaps
anathema to FORTRAN diehards – that the new
features added were relatively minor.

FORTRAN today
If we wanted to be critical, we could describe
FORTRAN as an outdated language. Certainly, it’s
continued to be updated, but it could be argued that
the new versions represented belated efforts to
introduce programming paradigms that had been
commonplace in other languages for decades. For
example, block-orientation only started to appear, in a
limited way, with FORTRAN 77, almost 20 years after
ALGOL introduced the concept. And to take the (many concurrent threads in the same program), off- In the world of
example of object-orientation, this wasn’t provided loading to accelerators like GPUs, and distribution – high-performance
computing,
until Fortran 2003, which appeared on the scene no that is communication between different programs, FORTRAN remains
fewer than 31 years after the Simula language first possibly on different computers. This has allowed a hugely important
introduced the world to this paradigm. If all this is a FORTRAN to take advantage of large supercomputers workhorse.
valid criticism, though, it would be somewhat surprising that have many CPUs and GPUs.”
to learn that, according to the latest TIOBE index of the So, what are the benefits of FORTRAN that have
popularity of programming languages, FORTRAN contributed to its use today, and how does it compare,
currently stands at a quite respectable 14th place. in this respect, to more modern languages? According
To learn more about FORTRAN’s continued appeal, to Rafik, “FORTRAN is a high-level language that gives
we spoke to Rafik Zurob, IBM Open XL Fortran the compiler more opportunities to optimise. An
compiler development manager. To start, we wanted to example of this is in the design of pointers. FORTRAN
know what types of organisation use FORTRAN and in lets the user specify targets a pointer can address.
what typical applications. Rafik’s response suggested This allows the compiler to construct a more precise
that it’s used in the upper echelons of computing for aliasing analysis than other languages like C, in which
CREDIT: Wikimedia.org/Bill Bertram, CC BY-SA 2.5. Wikimedia.org/OLCF at LANL, CC BY-SA 2.0

leading-edge research. “FORTRAN is typically used for pointers can address anything.” It remains to be seen
high-performance computing and other compute- whether the likes of Python and Java are still attracting
intensive applications. Examples are scientific such favourable comment in another half century.
modelling and simulations in the fields of weather
prediction, physics, chemistry, biology, medicine,
astronomy and AI. Some of the big users are the large
research labs in the US and Europe,” he told us.
But is it only used to maintain legacy applications, or
are new projects being written in FORTRAN today?
Apparently, both are true, as Rafik went on to say.
“While legacy FORTRAN libraries still account for a
significant part of FORTRAN’s user base, many users
also take advantage of the new features in later
FORTRAN standards. The use of FORTRAN has also
shifted; instead of being used to write the whole
application, it is now commonly used to write the
computation kernels for the application. Other
languages like C/C++ or Python are then used to
write the user interface or other code that calls the
computational kernel. As a result, many users don’t
realise they’re using FORTRAN libraries. For example,
if you’ve used Python’s SciPy or NumPy modules,
you’ve likely used a BLAS library written in FORTRAN.
FORTRAN programs nowadays often also use either While other home computers of the ’80s were Basic-only, the Amstrad CPC 464 offered
the OpenMP or MPI specifications to add parallelism CP/M as an option, and hence FORTRAN.

GET MORE OUT-OF-DATE THINGS! Subscribe now at http://bit.ly/LinuxFormat

www.techradar.com/pro/linux October 2023 LXF307 67


TUTORIALS Manage a VPS

VIRTUALMIN
Credit: www.virtualmin.com

Easily manage a free


VPS with Virtualmin
David Bolton demonstrates how to set up Virtualmin on a
free VPS and how to configure it to add websites.

irtualmin has been helping people administer usually lets you choose between different Linux server

V their Linux boxes for almost 20 years and it


runs on most distros, particularly CentOS,
distros, such as CentOS or Ubuntu. Free VPSes usually
have a more limited choice; this was done using
Debian, RHEL and Ubuntu. Available as both free Ubuntu 22.04 LTS.
(GPL) or commercial versions, it enables you to create After it’s installed, after the Post Wizard, an install
virtual servers with fully independent users. This checker runs to ensure that the installation is good.
OUR includes mailboxes, web application development Virtualmin found that the Virtualmin log folder in
EXPERT environments, websites, web apps, quotas, account /var/logs was missing. After manually creating it and
David Bolton rules and instances of web server, database server and rerunning the checker, everything was OK.
has been using other software. If you need to install an SSL certificate
Virtualmin for on your box, it can generate a CSR and install the Using Virtualmin
several years certificate. It’s all done through the admin website. Virtualmin is an administrative website, where you are
now, so is the It’s handy when you need to look after an internet either on the Virtualmin tab or the Webmin tab. The
perfect person box, such as a VPS or dedicated server, but lack the two menu tabs are where you control everything. The
to explain how it skills to set everything up – safely or otherwise. Do Virtualmin tab is used for accessing domain account
can work with a not underestimate securing your server. The internet management functionality, such as creating new
free VPS to set is an ongoing and permanent war zone; any internet- domain accounts or new databases associated with
up websites and facing computer can expect to come under a low-level those accounts, installing applications and more.
other activities. automated attack on most days. The author’s own Meanwhile, the Webmin tab is for general-purpose
WordPress website has had over 13,000 attacks since systems management features, user and group
2019, according to the Jetpack plugin. management, listing processes, managing installed
Many VPSes come with cPanel or Plesk but those packages, network settings, firewall settings and more.
are not free – typically, you pay between £12 and £16 It’s a bit confusing to start with because there’s a lot
per month just for those, on top of the hosting fees. For to learn and you will get lost. You might find it helpful to
cheap or free VPS hosting, Virtualmin is ideal. The VPS read the official tutorials, which cover getting started,
email, web, FTP, database and account
management in 30 single-page tutorials. They’re
more like definitions than tutorials but better
You can rerun than nothing. Also, the System menu on the
the system Webmin tab includes a System Documentation
checker at any
search page. This enables you to search on the
time from the
system for any relevant files and optionally
System Settings
menu. Just searches Google for relevant links.
click Re-Check You’ll also notice references to Virtualmin
Configuration. Professional, which isn’t free, and Cloudmin,
Do this after which provides a web interface for management
you’ve made of multiple systems, typically virtual systems
any system running under some virtualisation technology,
changes using such as Xen or OpenVZ.
Virtualmin. If you are a reseller, you’d find the
Professional version of Virtualmin handy
for automated installation of dozens of web
applications, including blogs, wikis, content
management systems, ad servers, ecommerce
Here’s the Virtualmin checker results page, with no errors showing. systems and more – but you won’t use those on

68 LXF307 October 2023 www.linuxformat.com


Manage a VPS TUTORIALS

FREE VPS
Finding a completely free VPS
isn’t easy, but there are a few
around, such as https://vpswala.
org. Typically, you get one CPU
core, 25GB of SSD storage, 1GB
of RAM and 1TB bandwidth. Will
Virtualmin work on this? The
minimum requirement is 256MB
but it grabs more RAM if you let
it. With only 1GB of RAM, the
Linux distribution needs to start
with few packages installed.
Here’s how to configure The Virtualmin login prompt (with
Virtualmin on a low-memory IP address hidden).
system; it boils down to switching things off.
To install Virtualmin, run Wget with this script:
$ wget https://software.virtualmin.com/gpl/scripts/virtualmin-
install.sh
Now run it with this command:
$ sudo sh virtualmin-install.sh
Ignore any error that mention fd0 – that’s the absent floppy drive!
After Virtualmin has installed, log in to the VPS IP on port 10000
and you should see the above login screen.
After logging in, you can configure things with a Post-Installation
Wizard to use less memory. Set it so that it doesn’t preload
Virtualmin libraries, doesn’t run an email domain lookup server, and
disable email virus scanning with ClamAV. If you don’t want MariaDB
or PostgreSQL database servers, they can be disabled here as well.
The Virtualmin and Webmin tab menus shown side by side. If you don’t see a module – for example, PostgreSQL – look at the
Unused Modules list under the Webmin menu. Look for PostgreSQL
a free VPS. So, let’s look at what you can do with your Database Server – there’s an Install Now button on its page.
brand-new server.

Lower your expectations! you a count and link to a page where you can update
The answer is not a lot because the lack of RAM is a one or more. Just click a button or two, and the update
big drawback. The main uses are installing websites, happens. If a reboot is needed, you’re also provided
setting up SSL certificates and what we really want with a Reboot Now button.
practising administration for when you move to a paid Virtualmin includes a decent file manager, too.
VPS. It gives a very good feel for what’s needed on a There’s no need to remote in to upload or edit files.
live server, and if you mess up, you can always restart The File menu enables you to create new folders or
and reinstall everything. files, and upload files from your computer. The Tools The Software
Package Update
Virtualmin provides a terminal so you can also menu lets you change ownership, permissions and screen, showing all
practise Linux commands on that as well. So, instead of attributes. Right-click on a selected file or files and you updates that are
using Virtualmin, you can level up your Linux fu doing can download, copy, cut or rename them. The image to be performed.
tasks such as adding users and
groups, and changing ownership by
hand if you wish. The web server
enables you to practise your PHP on a
live website as well.
If you want your website to access
a database, the Webmin Servers menu
lets you access MariaDB (on the
MySQL Database Server page) and
restart it if it’s not running. You can
then add databases, tables and so on.

Lazy updates
Anyone can do sudo apt update -y &&
sudo apt upgrade -y from a remote
terminal but Virtualmin also has you
covered. When there are updates
available, the main dashboard shows

www.techradar.com/pro/linux October 2023 LXF307 69


TUTORIALS Manage a VPS

the modules you require aren’t present, you’ll find PHP


Configuration under Tools on the Webmin menu, with
When using links to three php.ini files. It lets you edit any of them,
email regarding but only do this if you know what you’re doing; it’s all
a domain, too easy to introduce errors and kill PHP. Switch to the
such as when File Manager and make backup copies first.
registering it or Don’t leave the index.php file with phpinfo() around
putting it in the for too long; it provides a lot of useful information and
SSL Certificate makes the job easier for anyone wanting to hack your
Signing Request server. If you want to see the PHP information again,
(CSR), always
just click the PHP Options on the Virtualmin Server
use an email
address that
Configuration menu and click the tiny PHP just to the
is not related right of the PHP version.
to the domain.
If you use Manage certificates
an address Click the Server Configuration link on the Virtualmin
for a domain tab. You’ll see an SSL Certificate menu option. Click
and there’s a it and you see details of your certificate once it’s
problem with installed. There are six tabs across the top. The second
that domain, The File Manager screen with its pop-up right-click menu in the centre. one is Create Signing Request. This is a form you have
you might
to fill in about the website. Make sure you use the two-
not be able to
access any of
(above) shows the web file index.html after it was letter code for the Country Code field, such as GB (not
those emails. renamed to index.php. UK). When that’s done, click Generate CSR Now.
This generates a CSR, which looks like this (a few
Setting up a website lines were removed for security and replaced with …):
With limited disk space and RAM, you aren’t going to -----BEGIN CERTIFICATE REQUEST-----
host many websites unless they are static HTML-only, MIIDJDCCAgwCAQAwgZ4xCzAJBgNVBAYTAkdCMRU
but you can probably get away with two or three PHP wEwYDVQQIDAxMaW5jb2xuc2hp
websites. Virtualmin/Webmin gives you the default site cmUxEDAOBgNVBAcMB0xpbmNvbG4xHDAaBgNVB
when you put in the IP or domain. Any more and you AoME0hvc3QgZGVmYXVsdCBkb21h
have to add virtual sites. aW4xFjAUBgNVBAsMDVdlYnNpdGUgQWRtaW4xEz
Let’s look at the default site first. This is physically ARBgNVBAMMCnd3dy40ZG8udWsx
located under /home using the login username/public_ …
html; for this server it’s /home/vpsserver/public_html. Ebf01WkYjto8Mi5c0icbaLaovC3qjoMT/y5oqMSf6BW
There’s just one file here: index.html. Using the File UxVKBlF6Og2BnDK3eH3t7
Manager, it was renamed to index.php, then edited. QFijfyFaQJdVckghRJpDmkH8L89ycoXyaeo0PjGm/by
Everything was selected and deleted then replaced KkXBcVaWkEYxd/gcHWmTd
with this line: B+IyVTegHsPfNHQw+xETDGNfpa8coJR4Ho8aZPOdkl
<?php phpinfo(); ?> TvT2R8vTNQxg==
After saving the file, when you visit the server -----END CERTIFICATE REQUEST-----
default website, you get the whole PHP Information You also see a private key, which looks like the CSR:
page. The current version of Virtualmin runs PHP 8.1 -----BEGIN PRIVATE KEY-----
and comes with 68 PHP modules installed by default. If MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSj
AgEAAoIBAQC0Dmd9t99QB2Hd

SSL CERTIFICATES m/v23Cx/yGc/EkP8QwSvIxY=
-----END PRIVATE KEY-----
Although there are a few people resisting getting an SSL (TLS) There are 24 lines missing from the private key
certificate for their website, it’s generally accepted that you need shown above for safety. They are rarely seen in public
one. Without it, browsers warn visitors away and Google lowers the and you must always keep your private key secure.
ranking in its search engine, making it harder to find. Now you have to send the CSR off to a certificate
Technically, the SSL certificate is now called TLS; this is the authority and buy a certificate. They also expect you to
upgraded and more secure and reliable version of SSL, but people prove that you administer the server. This can be done
still call it SSL. It encrypts the traffic between your browser and the in a variety of ways, such as putting a file they send into
website, and the more expensive certificates are only issued after a hidden folder or adding a line to the DNS zone record
the certificate authority has established that the website is for your domain. You need to log in to your domain
legitimate. We’re only interested in the free or cheap certificates. registrar for that. Once that’s done and they’ve verified
You can get a free certificate from Let’s Encrypt, and Virtualmin it, they email you your certificate. You paste it in on the
automates fetching and installing such certificates. They need Apply Signed Certificate tab, click install and the job’s
replacing every three months, or you can buy a certificate lasting done. Virtualmin also fetches all the chain certificates
four years for £20 instead. But there’s a slight gotcha: you have to needed for a certificate authority’s certificate to work.
renew it every 398 days. It’s free – you just upload the CSR and get a Make sure you keep a copy of the private key, CSR
new certificate. Note, however, that it’s likely this will be reduced to and certificate files. There’s a copy of the first two in
90 days in the future, as Google is pushing for this. your user’s home folder and save your email for the
certificate. If anything happens to the server or you

70 LXF307 October 2023 www.linuxformat.com


Manage a VPS TUTORIALS

xx.xx.xx.xx
vpsserver.local
vpsserver Before
xx.xx.xx.xx example123. you install
com Virtualmin, if
That provided access you plan to host
to both websites from the a website, you
should set up
home browser.
your domain
Virtualmin treats the
to point to the
virtual server’s websites VPS. Use the
slightly differently from domain name as
the main server website. the hostname
With virtual servers, you when you install
get more control, and it Virtualmin.
has the visitor tracking
software AWStats.
The System Information page provides handy details about your system’s current state. Each of the servers
has an extensive user
decide to move to another server, you can take all interface but you can edit the config files instead. If
three with you and install the private key and certificate you’re feeling adventurous, the Webmin Servers menu
on the new server. Also, you need the CSR when it lets you view or edit any of the various Apache config
comes time to renew the certificate after the 398 or files, including those for the virtual servers. This is
possibly 90-day period. That is free; you only pay for a where you can make changes – redirections, for
new certificate after four years. example. Before you do, spend time on the Webmin
Backup Configuration Files menu and make copies.
Creating virtual sites Something to bear in mind when you add
Web servers such as Apache can manage multiple Virtualmin to a Linux box: not only does it have
websites on the same IP address. This is done by the main user davidxyzer but it adds a user for the
setting up virtual servers in Virtualmin. A virtual server main site vpsserver and any virtual servers, such as
is an account in Virtualmin that includes a website, example123. On the Virtualmin tab, the first line below
email and FTP access all associated with a domain Virtualmin is a pull-down control showing the current
name. You can also create subservers. These are site and it lets you switch between them. You won’t see
secondary domain names set up within a virtual the pull-down until you have at least one virtual server.
server, with their own domain name and set of email Don’t get them mixed up! Even if you don’t
addresses and FTP accounts. Virtualmin is an amazing piece of software and it own a particular
So, if you have the domain fred.com, you set it up as simplifies administering a Linux server safely, but there domain, you can
a virtual server. Now, if you want primary.fred.com, you is quite a learning curve and the documentation is add it to your
set it up as a subserver of fred.com’s virtual server. adequate at best. Everything is there in the web hosts file with
When you set up a virtual server, you can have interface; you just have to find it. sudo nano /
Virtualmin set up DNS zones and an Apache website, Virtualmin includes extensive support for email, etc/hosts and
accept mail for the domain, complete with spam setting up accounts, anti-spam, Postfix mail server and your browser
will believe that
filtering, have its own Webmin login and even AWStats so on, but on a free VPS with limited disk space and
it is yours.
reporting for web traffic. These happen by default but RAM, managing email might not be its best use.
you can disable any or all.
When Virtualmin creates the
virtual server, it does a lot of things
in the background: it adds a virtual
site to Apache, configures DNS
zones, creates email and tries to
get a Let’s Encrypt certificate for
the new virtual domain. The domain
example123.com was added as a
virtual server but Virtualmin wasn’t
successful in getting a certificate
from Let’s Encrypt due to not
owning that domain and so not
pointing the DNS to the VPS.
The IP was added to our home
computer hosts file and the domain
example123.com. Here is /etc/
hosts with IP addresses masked
to protect the innocent: Provide the relevant details and Virtualmin can generate a CSR and install an SSL certificate for you.

GET THE REAL LXF MAGAZINE Subscribe now at http://bit.ly/LinuxFormat

www.techradar.com/pro/linux October 2023 LXF307 71


TUTORIALS Steam Deck

STEAM DECK
Credit: https://store.steampowered.com/steamdeck/

Get more out of


your Steam Deck
From external controllers to an external display, Neil Mohr
offers a fistful of handy gaming tips for your Steam Deck.

e’ve been sporadically looking at

W Valve’s Steam Deck over the last


year or so. In LXF299 we covered SD
card expansion and hacks to use Epic games,
GoG and general sweet plugins. Last issue
we covered replacing the internal NVMe
OUR drive, while back in LXF289 Jonni explored its
EXPERT underlying Linux software. We’ll dive into
Neil Mohr Steam Deck retro emulation down the line,
has no time for too, as it’s a pretty cool platform for that.
gaming but is As we mentioned in LXF299, the Steam
pleased his Deck has a fully functioning USB-C
children can connector, so you can buy all manner of You can play Steam Deck with your Steam Controller while running it over Steam Link!
make the USB-C docks, not just the overpriced official
most of his one from Valve. This enables you to not only charge remaps buttons to the physical controller in hand. Bear
19-year-old the Steam Deck but also attach an external display, in mind that the default on-screen display is an Xbox
Steam account. keyboard, mouse and, interestingly, game controllers – one and often games aren’t as smart and can request
though Bluetooth is always an option, too. the wrong A or B buttons if reversed on your controller.
Using a game controller is the best option if you’ve Issues we found are that an older DualShock 3 is
docked your Deck to an external display for some big- only practical over USB-A, and you can pair the Switch
screen fun. So, let’s take a look at the options. Joycons but they only work as separate pairs – there’s
Starting with the most common wired Xbox 360 a third-party Arch daemon that can combine them at
controller option, if you’ve got one lying around it’s a https://aur.archlinux.org/packages/joycond-git.
great choice. This can be attached directly to the Deck
via a USB-A-to-USB-C adaptor or via a dock. Game optimisation
Connect power from the Steam Deck to a USB-C We’ve talked about the Performance Overlay in
dual-monitor docking station. Plug in the USB-A end of previous issues and this does offer basic optimisation
the Xbox 360 controller to an available USB-A female of gaming frames per second, but we can do better.
port on the dock. Plug in the USB-C cable from the There’s a hack called CryoUtilities that can tweak a
dock into the Steam Deck. The Steam Deck auto- number of low-level settings to boost frame rates. Take
detects the controller. Once paired, you can use the Grand Theft Auto 5 – the average frame rate goes
Xbox controller as you would the Steam Deck’s built-in from 64fps to 92fps at low quality and from 60fps to
controls, with the Xbox button acting as the Steam 70fps at high quality.
button on the Steam Deck. The developer has been tweaking the utility and
Bluetooth controllers include Xbox Series X/S, Xbox blogging about his experiences, so it’s pretty rock solid.
One, PS5 DualSense, DualShock 4, Nintendo Switch To install CryoUtilities, you need to launch the Steam
Pro and the defunct Valve Steam controller. Pairing a Deck in Desktop Mode. Open Firefox and go to https://
controller is a case of going to Settings > Bluetooth on github.com/CryoByte33/steam-deck-utilities#install.
the Deck and turning it on. You need to initiate pairing Download the .desktop file to the desktop and double-
on the controller: on the Valve Steam Controller, hold click the Install CryoUtilities icon. Or you can do it from
Y+Steam button (if this doesn’t work you might need to the terminal with:
update its firmware); Switch Pro and Xbox have pairing $ curl -L https://raw.githubusercontent.com/
buttons; the PlayStation pad uses the PS button. CryoByte33/steam-deck-utilities/main/install.sh | sh
The Deck interface is smart enough to recognise To run the CryoUtilities installer, open the
the type of controller that’s connected and auto- application menu, select Utilities, and then run the

72 LXF307 October 2023 www.linuxformat.com


Steam Deck TUTORIALS

USE A TABLET AS A SCREEN

Download Steam Link Get connected Adjust your settings


1 The Steam Link app is what remains 2 With your Steam Deck turned on, 3 You can bring up the Steam
of the failed 2015 Steam Link streaming open the Steam Link app on your tablet. It Link settings on your tablet at any time
box. The software was open sourced and may take a few seconds for the devices to simply by tapping anywhere on the
the viewer app remains available on the establish a wireless connection. It runs a tablet’s screen. From there, you can
Apple and Google app stores. Click on speed test to check whether streaming configure the touch controls or even
the app store application on your tablet. is viable – you’re after a consistent fast disable them completely, adjust the
Search for “Steam Link” and once you’ve connection. Once the tablet and Steam tablet’s volume or select to use a
found the app, download it. Deck are connected, tap Start Playing. separate controller, if you wish.

CryoUtilities app. Enter your password when prompted. running game. Generally, it’s been shown that 4GB of
Don’t have a password? In Desktop Mode, open the VRAM is optimal, leaving a decent 12GB for the OS
application menu and select System > Konsole. Type and game. To adjust this value, power down the
passwd and select something simple as the characters Steam Deck. Hold the Volume Up button and press
are hidden. Press Enter and retype to confirm. the Power. Once the UEFI has loaded, select Setup
Generally, you can just stick to the Recommended Utility > Advanced > UMA Frame Buffer Size > 4GB.
Settings and you’ll bank the speed improvements. For Select Save and Exit.
specific games, you might want to tweak some of the Finally, one last quick tweak you can apply is to
settings but it’s unlikely you’ll improve performance lock the frame rate to 40fps. “But surely 60fps is
beyond the supplied tweaks. So, what’s it doing? best!” you protest. Au contraire – due to the reduced
Firstly, it pares back the Deck’s swap file use and hardware of the Deck, it’s often impractical to ever get
optimises its memory policies to avoid stutters. It also near that 60fps figure and an erratic frame rate can
advises you to tweak VRAM, which we look at below. cause input lag and pointless strain on the battery life.
To kick off, it massively reduces the tendency of the While 40fps may seem closer to 30fps, that’s
Deck’s kernel to use the swap file, until it absolutely actually not the case. A 60fps game refreshes every
needs to, and also reduces wear on the SSD. So, rather 16.7ms, while a 30fps game refreshes every 33.3ms,
than constantly copying memory to disk, it only does and a 40fps game refreshes every 25ms. The 40fps
so when it’s actually running low on physical memory. It level is precisely in the middle of 30fps and 60fps.
also greatly increases the size of the swap file as the This results in lower input lag, smoother visuals and
Giving games
default one is rather small. smoother screen updates. more VRAM helps
An optimisation to the virtual memory system To set the Framerate Limit in gaming mode, press … them run faster.
enables Transparent Huge Pages and also enables > Performance > Refresh Rate > 40 and profit! Whatever next?
wider use of them by memory subsystems. This is less
intensive than using the standard 4K page chunk in the
MMU. Alongside this, the kernel as standard tries to
defragment memory during system down time, which
is great on desktops and servers, but there’s never a
‘good time’ while gaming, so this function is disabled.

More VRAM
The Steam Deck has a unified memory architecture,
which means the CPU and GPU use the same physical
memory. At boot, the UEFI allocates a reserved block
for just the GPU to use, though it can access more if
requested – however, the CPU also takes precedence.
By default, that’s 1GB of VRAM, which isn’t a lot
for modern games and leaves 15GB for the OS and

GET MORE TIME TO WASTE… Subscribe now at http://bit.ly/LinuxFormat

www.techradar.com/pro/linux October 2023 LXF307 73


ADMINISTERIA
Stuart Burns
is a Linux Using Bash aliases
for an easier life
administrator for
a Fortune 500
company
specialising
in Linux.

ENCRYPTION Keep things simple by creating and using aliases to


GENIE PROBLEM run your most frequently executed commands.
You can’t argue with maths – any people consistently type ls To remove an alias, use the command
unless you’re the British
government. Rishi and his chums
M -larth every time they need a
directory listing. Only marginally
unalias ll . The deftness of this is in keeping
with the Linux philosophy of simplicity and
at MI5 want to break good better is ll . Newcomers to Linux could be efficiency. Using the alias command
encryption to be able to spy on forgiven for thinking ll is just shorthand appropriately is definitely a time saver.
citizens. Private communications for ‘list long’, but it’s actually an alias. Some To make these permanent, open the
should be just that: private. guides get bogged down in the intricacies of .bashrc file, add the aliases in the same
The government is proposing it but here we’re giving you the quick take. All format, and save the file. Using source ./
that it should have a legal the aliases for a specific users are in ./bashrc bashrc re-reads the files to reflect changes.
intercept capability to read in their home folder.
everyone’s encrypted messages As the name implies, aliases
and traffic. That means, as per are a way in which you can create
the hacker film Sneakers, “No shorthand pseudonyms to run
more secrets.” All your commands exactly as you desire.
confidential messages, love In Bash, typing the command
affairs, gripes and downloaded alias displays all the alias names Using
naughty films laid bare to the and the full command that will run if customised
aliases can
government apparatus. executed. To overwrite the existing add up to
This push by the government alias (or create new a new one if it be a useful
is disingenuous because the way doesn’t exist), just use: time saver.
the police mostly work is by alias ll=’ls -larth’
intelligence-driven policing via
informants and disaffected
insiders. They already have many
tools in their armoury…
Often criminals are caught not
because of the content of their
SSH like a pro
messages but because they A selection of quick tips that are handy to
do stupid things or are not IT
forensically aware. Carrying a have up your sysadmin sleeve.
smartphone as you carry out a
killing leaves lots of metadata. Any sysadmin with more than a week of work
The police already have the under their belt knows SSH, but there are
right to compel the disclosure many tips and tricks that often get missed.
of passwords via the RIPA Act An example is troubleshooting SSH. When
under threat of a two-year prison trying to SSH from a Linux box to a server
sentence for non-compliance. using the SSH command, adding the
Like nuclear weapons, you parameter -vvv provides lots of verbose
can’t uninvent encryption or output and is ideal for troubleshooting why
make sure only the good guys the SSH session won’t connect. SSH session debugging becomes much easier when using
the -v parameter to increase output verbosity.
have it. You also can’t have half- Another odd thing we see is people
on/half-off encryption. It either taking all sorts of steps to be able to copy capabilities and so on) but for copying files
works or it doesn’t. You can files to another system. The scp command between systems, it can be a real time saver.
guarantee that if implemented, is really useful here because it enables the Lastly, there’s the ability to run commands
the bad guys will find a weakness administrator to copy files between servers remotely. Sometimes you just want to run a
to exploit, and it really could be without additional software or even ports quick command – for example, to install a
game over. Find out more being opened. After all, scp is essentially package. Using ssh -t admin@myredhatbox
courtesy of the EFF: ‘copy via SSH’. Depending on the data in “sudo yum install tmux” would install Tmux
https://bit.ly/47bq0iO. question, it may not be the best tool (Rsync without having to log in to the server, then
is good at large data copies with resume run the command and then disconnect.

74 LXF307 October 2023 www.linuxformat.com


ADMINISTERIA

Purge Docker debris


Docker is great at a lot of things but that doesn’t mean that it doesn’t
require a dose of preventative maintenance periodically.
ver time, Docker deployments can consume a filters can be found at https://bit.ly/3OkXvGP. While

O lot of space. Not only do they take up room,


but they also create clutter and orphaned
that may sound a little risky, don’t forget what
containers are all about: ephemeral services that are
containers – computer cruft. used and then discarded. A user should never be
Performing a docker ls command may well reveal tweaking items inside a container because it will be
lots of dated containers that have been downloaded lost when the container is replaced. Use parameters
and often forgotten about or perhaps intermediate and docker-compose files to pass in needed
build images. Speaking from personal experience, in a commands and set up, or better yet check out how to
large production environment, the reclaimed space can build your own Docker images.
be in the tens of gigabytes. The thing is, it’s not just Managing volumes is perhaps the most worrisome
containers that consume resources but images, too. part of Docker management because this is where all
In this short guide, we cover the necessary steps the stateful data is stored.
you should take to reclaim space and tidy up a Docker Logs can also be a bit of an issue. Logs are good
environment. Firstly, to see what kind of space is but left unpruned they can consume an awful of space
consumed, use: very quickly. The good news is that there is a really
$ docker images ls -a easy way to limit log size by tweaking the daemon.json
The -a is important because by default the output configuration file. An example is shown below to be
hides intermediate images and potentially gives a false included, not removed (borrowed from https://bit.
perspective. Removing Docker images one by one is ly/3YgVgZv):
easy enough using the image ID: {
$ docker rmi <imageid> “log-driver”: “json-file”,
Doing more than a few of these can get very “log-opts”: {
repetitive and boring, but a quick Bash one-liner can “max-size”: “10m”,
be used to remove all the images (then you can pull “max-file”: “3”
down new images as needed): }
$ docker rmi -f $(docker images -a -q) Often, the overlay filesystem is being used. What
Using this command deletes all the images that this does is that each additional write creates a new
aren’t connected to a running container. Removing layered filesystem.
containers can be achieved with: Finally, if you just want to clean up the environment
$ docker rm <CONTAINER ID> and damn the consequences, you can use docker
In a large development environment, that’s not prune -a . This is considered the nuclear option. It
practical, but there is a more powerful Docker removes any non-running containers and unused
parameter: prune. The command docker prune -a images, as well as networks that are not used by at
tries to perform an automated clean-up. It removes old least one container. Note that last part: it also deletes
images, containers, dangling images and intermediate unused networks.
build images. Be aware that it also erases any non- For safety’s sake, it does not remove the volumes.
running container, so use with caution. To remove unused volumes, use docker purge
Most Docker commands obey the filter parameter. --volumes -a . This does all that the standard command
Filters are expressed as pairs. We can use a filter with does but also removes unused volumes – risky. Ensure
the prune parameter to say ‘Don’t delete containers there is a good backup before doing this.
that have stopped within the last 24 hours’: In summary, keeping a clean Docker installation
$ docker container prune --filter “until=24h” isn’t just good practice but it can save money by
Using this switch purges all the containers that are helping to prevent the growth sprawl that necessitates
older than the time given. More details on the prune purchasing additional disk space.

Global pruning of
unused items is
straightforward
but exercise
caution over
what’s deleted.

www.techradar.com/pro/linux October 2023 LXF307 75


REVIEWS Password manager

Bitwarden
A powerful, feature-packed open source password manager
with a free option and decent pricing, thinks Mike Jennings.
itwarden takes a different
IN BRIEF
There’s lots
B approach from most
password manager tools
to like about because it’s released under the open
Bitwarden. It source licence. But there’s more to
has rock-solid like about this app beyond it being
security options open source. Bitwarden promises
bolstered by easy, powerful security within
the app’s open minutes, unlimited password and
source status. device support, and secure,
It works with encrypted sharing.
virtually every Subscriptions begin for free, and
device and for many this is more than sufficient,
browser you because it supports an unlimited
could think number of passwords and device
of – so it’s syncing. Typically, rival companies’ With a full range of browser, platform and mobile support, all the boxes are ticked.
impressively free plans limit users to just one
versatile, too. active device, so this is a real selling point for Bitwarden. Bitwarden includes plenty of features to make
Sharing passwords is also included in the free plan, as is life easier. It automatically fills forms, quickly syncs
a password generator and support for email aliases. passwords and data across devices, and tests passwords
Upgrading to the $10 per year Premium plan adds for strength levels. Like many other apps, it monitors
emergency access, advanced 2FA, an authentication your password vault and lets you know if your
module and security reporting alongside priority information has been exposed in a security breach.
customer support. Paying customers can also send Bitwarden has announced that passkey support is
encrypted files, which is good for sharing sensitive coming in the summer of 2023, so it should be just
information like bank statements and bills. There is also around the corner. It works both ways, which means
a family option at $40 per year, and Team packages users will soon be able to set up a passkey for their
from $3 per member per month, with API access and Bitwarden account to skip the master password stage.
unlimited sharing. An Enterprise package bumps this to Most importantly, third-party sites that support passkeys
$5 per member per month but adds single sign on and can be added to the extension or app.
full admin controls. All of these can be self hosted, too. This is an active open source project, so there’s plenty
of support in the form of an online community, tutorials, a
Platform games knowledge base and forums. Every common feature has
Setup is a breeze and it happily imports LastPass, a well-written tutorial, and the user forums, while basic,
1Password, Firefox, Chrome, Edge and more config files. are active and helpful. You can even email the Bitwarden
It has superb platform support, too. There are Windows, developers for support via an online support portal, with
Mac OS and Linux desktop clients, and extensions for Premium subscribers getting priority. The only thing
every major browser, such as Chrome, Safari, Firefox and missing is phone support – that would have been a
Edge, alongside more obscure options, such as Vivaldi, welcome addition, especially for business customers.
Brave, Tor and Opera. For mobile users, the iOS app is
accompanied by a Watch OS app for Apple Watches, and
Android users are also catered for. Bitwarden supports
VERDICT
command-line use and can be accessed on the web. DEVELOPER: Bitwarden
Bitwarden has a sleek, straightforward interface that WEB: www.bitwarden.com
enables you to easily search and access your passwords PRICE: Free or $10 per year
and secure data. It’s not as slick-looking as some other
tools, but the app’s functionality is more important. FEATURES 9/10 EASE OF USE 9/10
While there are desktop clients for viewing or editing PERFORMANCE 9/10 VALUE 9/10
credentials, and checking other account information,
most people rarely use them in favour of the extensions One of the top password managers around, Bitwarden is
CREDIT: Bitwarden

that serve the password manager’s primary function: to secure, feature-packed and open source, and has support
automatically fill out login details and capture new ones. for mobile devices.
Adding a new item is as easy as filling in a simple form,
and you can attach notes and custom fields to each Rating 9/10
entry for total personalisation.

76 LXF307 October 2023 www.linuxformat.com


VPN REVIEWS

ExpressVPN
Looking behind the hype machine, Mike Williams wonders
whether this is as good as it sounds?
xpressVPN has ramped up its investment in
IN BRIEF
This is a top-
E third-party audits over the past year, and the
results are spectacular. While other providers
quality VPN that expect you to be impressed by a single app audit from
exceeds our years ago, ExpressVPN released the results of 11 audits
expectations in 2022 alone.
in everything Another recent highlight is Keys, ExpressVPN’s highly
from platform configurable secure password manager that comes free
coverage and with your subscription. Significant new features include
privacy, to support for saving credit card details and secure notes,
ease of use, and even importing credentials to Chrome. This is
unblocking excellent news, but Keys is being rolled out gradually, and No matter your requirements, ExpressVPN delivers secure connections.
abilities and you may not have access to it yet on your device.
excellent Elsewhere, ExpressVPN has released Aircove, a some did better. Private Internet Access, Proton VPN
customer powerful Cure53-audited Wi-Fi 6 router with the and Windscribe all beat 300Mb/s, and Mullvad soared to
support. More company’s router app built-in. Set this up at home and an exceptional 500Mb/s.
expensive than all your devices can use ExpressVPN, without having to The real star is ExpressVPN’s Lightway protocol,
most, but you install apps or worrying about device connection limits. though, which accelerated its average download speeds
can see why. The company offers a vast network of more than to between 720Mb/s and 750Mb/s – a significant jump
3,000 servers across 160 cities in 94 countries. Europe from our previous tests, which clocked in at 560Mb/s.
and the US have the best coverage, but ExpressVPN also Unlike most of the competition, ExpressVPN doesn’t
has many locations in Asia and several countries that just make vague claims about its unblocking abilities.
rarely appear elsewhere. There are 26 Asia-Pacific The company publicly specifies which platforms are
countries alone; by comparison, Mozilla VPN only has supported: Netflix, BBC iPlayer, Amazon Prime, Disney
around 30 countries in its entire network. Plus, Google, Wikipedia, YouTube and others. It’s good to
see a provider being upfront about what it claims to do.
Shields up! Support is wide and full, covering Linux, Windows,
ExpressVPN’s privacy protection begins with its choice Mac OS, Android, iOS, routers, Chromebook and Kindle,
of highly secure protocols (OpenVPN and its own open with Chrome and Firefox extensions that provide direct
source Lightway), with industrial-strength encryption to control from your browser.
shield your data from even the best-equipped attacker. ExpressVPN’s support site gets off to a good start
ExpressVPN also runs its own private, zero- with its list of troubleshooting guides. Most articles are
knowledge, 256-bit encrypted DNS on every server. This well written and deliver in all the key areas. The setup
prevents data about your online activities leaking out of articles are even more impressive. And this isn’t just
the VPN tunnel, keeping you safe from every angle. We about Windows – it covers Linux, iOS, Android, Mac,
put the mobile and desktop apps through the wringer, Chromebooks, Smart TVs, routers and anything else you
using multiple leak-testing websites, and couldn’t find can think of. The chat support was well above average,
any trace of DNS or traffic leaks. too, with agents spending a long time patiently walking
Check out the typical VPN website and you usually us through some well-chosen diagnostic steps.
find ‘no logging’ claims prominently displayed, but often
behind that there is a privacy policy that either gives you
very little detail on specifics or reveals that the company
VERDICT
does log some of your information after all. DEVELOPER: ExpressVPN
ExpressVPN does things differently. Out goes the WEB: www.expressvpn.com
usual fact-free ‘zero logs’ boasting, in comes a clearly PRICE: From £5.53 per month
written Policy Towards Logs document, which explains
precisely what ExpressVPN collects, what it doesn’t, why FEATURES 9/10 EASE OF USE 9/10
the service works this way, and what it means for you. PERFORMANCE 9/10 VALUE 8/10
Speed is an important factor when choosing a VPN,
and we run intensive tests to see what a service is A huge network, plus it’s fast, secure, unblocks Netflix and
capable of. While ExpressVPN offers some fantastic just about everything else, supports torrents, has no serious
speeds, it’s by no means the fastest VPN. Its peak logging, offers apps for everything, and is easy to use.
OpenVPN speeds were reasonable at 280Mb/s. That
outperforms VyprVPN (100Mb/s), Surfshark (130Mb/s), Rating 9/10
IPVanish (225Mb/s) and NordVPN (240Mb/s), although

www.techradar.com/pro/linux October 2023 LXF307 77


IN DEPTH Wi-Fi 7

Next-gen Wi-Fi
Another new wireless technology, already? Darien Graham-Smith
looks ahead to the seventh generation of the IEEE networking standard.
f you’re not ready for Wi-Fi 7, that’s and technologies are already firmly defined, allowing

I understandable. Most of us haven’t caught


up with Wi-Fi 6E yet, which only hit the
mainstream around 2020 while we were
manufacturers to build and release Wi-Fi 7 hardware
well ahead of the final sign-off. Indeed, as we’ll discuss,
you can already buy a handful of Wi-Fi 7 devices.
distracted by other issues. Strictly speaking, though, That’s how it goes in the world of Wi-Fi: 802.11n and

CREDIT: Rawpixel Ltd/iStock/Getty Images Plus


Wi-Fi 6E wasn’t a new standard. While it introduced 802.11ac routers were widely available long before the
support for wireless networking in the 6GHz frequency standards had been finalised. Indeed, while Wi-Fi 6 was
range, it’s otherwise based on the same 802.11ax spec released in 2019, the standard wasn’t fully signed off
as Wi-Fi 6. It could have been called Wi-Fi 6.1. until February 2021 – 16 months after we’d tried our
So it’s getting on for four years since the last major first Wi-Fi 6 router, the Asus RT-AX88U.
Wi-Fi update – which is about par for the course. From
the original 802.11b release in 1999 onwards, each QAM jam
generation has reigned for between four and six years, Wi-Fi 7 uses the same OFDMA technology as Wi-Fi 6,
before being replaced by something smarter and which divides up the airwaves according to demand
faster. Wi-Fi 6 was adopted in 2019, and Wi-Fi 7 is due (and the router’s QoS rules), so that multiple devices
to be finalised in 2024 – so it fits the pattern perfectly. can smoothly share the available bandwidth.
That doesn’t mean you’ll necessarily have to wait However, each ‘slot’ in a Wi-Fi 7 connection carries
until next year to move up to Wi-Fi 7. The core features more data than before, thanks to the use of higher-

TIMELINE: The when and where of Wi-Fi


1999: 802.11b 2003: 802.11g
The first mainstream Wi-Fi standard, 802.11b operated The first major Wi-Fi upgrade used the same 13
exclusively on the 2.4GHz band. It offered connection speeds channels as 802.11b, while raising the maximum data
of up to 11Mbits/sec, and could work on any of 13 user- rate to 54Mbits/sec. As would become the norm, the
selectable 20MHz channels to avoid interference. The specification was designed for backwards compatibility
companion 802.11a standard used the faster 5GHz frequency with older devices – but if a single 802.11b client
range and better encoding, but licensing delays and higher was connected to an 802.11g network, it slowed the
manufacturing costs meant it never caught on. connection down for everyone.

78 LXF307 October 2023 www.linuxformat.com


Wi-Fi 7 IN DEPTH

QAM! BAM! THANK YOU MA’AM!

Moving from binary modulation to quad modulation, then adding amplitude modulation takes us from encoding a single binary digit to four binary digits and a total of 16-QAM.

Wireless networks use radio You can see a traditionally a polar chart, you’ll see this (above), we have two bits
waves to transmit digital drawn sine wave with some gives a huge margin of error, per quadrant, enabling us to
data. How quickly the waves numbered dots on it (above making it very robust, and it’s encode four bits (16 decimal)
oscillate – 2.4GHz, 5GHz or left). Alongside this is a polar the base modulation scheme per wavelength frame, but
6GHz – underlines the overall coordinate chart (a circular for 802.11a/g/n/ac. with the margin of error now
speed. You add channels, plot) representation of the The next step is to say a quarter of the size. This is
which are blocks of same sine wave. This plots a why not encode a number for called 16-QAM, and if you
wavelengths within those full cycle of the wavelength every 90 degrees of a phase think this is impressive,
frequency ranges. But around the 360 degrees of a shift? This is Quadrature 802.11a supported 64-QAM
how does digital data get circle, and you can see where Phase Shift Keying (QPSK) back in 1999, and 802.11ac
encoded on to radio waves? the path tracks through. and it lets you encode two supports 256-QAM. QAM is a
It takes the form of a type Let’s send some data: if bits and twice the amount of sliding system; as noise in
of modulation – a system you receive a waveform of data in the same amount of the signal increases, the
where the waveform is 0 to 180 degrees, that’s a 0, wavelength, but halves the router will fall back from
altered in a way so the but if it’s shifted to 180 to margin of error. 256-QAM to 64-QAM, then
data can be retrieved at the 360 degrees, it’s a 1. What This is where QAM steps 16-QAM, 4-QAM (QPSK) and
receiving end. The industry we’ve just invented is Binary in, which modulates not eventually BPSK, reducing
uses Quadrature Amplitude Phase Shift Keying (BPSK): just the phase but also the the data rate but increasing
Modulation (QAM) – yay, we shift the phase 180 degrees amplitude (size) of the wave. reliability. Wi-Fi 7 will boost
know some of those words! and you change the value. On In the 16-QAM polar diagram this to 4,096-QAM!

order QAM – quadrature amplitude modulation. This is meaning that the same radio patterns that used to
a technique used to encode data in a radio signal by convey eight or 10 bits of data can now carry 12.
adjusting the amplitude and phase of a pair of carrier Wi-Fi 7 also brings upgraded MIMO capabilities,
waves. Different combinations create different wave enabling devices to communicate using up to 16
patterns, used to represent different binary values. antennae at once – twice as many as Wi-Fi 6. In
Since the radio waves themselves are analogue, the practice, we doubt you’ll see a 16x16 MIMO connection.
number of values that can be represented is effectively Multiplexing pushes up the cost and complexity of the
infinite – the only limitation is how precisely the radio design considerably, which is why consumer Wi-Fi 6
transceiver can modulate and decode the waves. Wi-Fi and 6E devices rarely go beyond 2x2 MIMO.
5 used a 256-QAM system, where each wave pattern
encoded eight bits of data, while Wi-Fi 6 increased this Double lanes
to 1,024-QAM, supporting 10 bits of data. The latest Wi-Fi 6 and 6E benefit from fat 160MHz channels,
Wi-Fi 7 standard further boosts this to 4K-QAM, twice as wide as those specified in the previous Wi-Fi 5

2008: Wi-Fi 4 (802.11n) 2014: Wi-Fi 5 (802.11ac)


The 802.11n standard was the first to use QAM and to bring The adoption of 5GHz networking was slow in the 802.11n era,
5GHz networking into the mainstream – although dual-band so the next version of the standard made support mandatory
support was optional. Other innovations included 40MHz for all clients and gateways. It also defined a new 80MHz
channels and MIMO for downlink connections; in theory, these channel width, and 256-QAM encoding – a big step up from
enabled 802.11n to hit download speeds of 600Mbits/sec, the 64-QAM used in the previous generation. This enabled
although most consumer routers topped out at 300Mbits/sec. connection speeds of up to 867Mbits/sec per stream, or as
In 2018, 802.11n was officially rebranded as Wi-Fi 4. much as 2.6Gbits/sec for a single client using 3x3 MIMO.

www.techradar.com/pro/linux October 2023 LXF307 79


IN DEPTH Wi-Fi 7

Jumping to
6GHz (actually
7GHz in the USA)
increases the
available channels,
and reduces
interference for
a total available
bandwidth of
33Gb/s – but not
to a single device.

standard. Wi-Fi 7 doubles this again, with the maximum at the forthcoming World Radiocommunications
supported channel size going up to 320MHz. That Conference in November.
increases the nominal data rate from 1.2Gbits/sec to To get the best performance from these ultra-wide
2.4Gbits/sec per stream. channels, Wi-Fi 7 uses preamble puncturing, which
This benefit doesn’t apply on every radio band. allows the router to selectively avoid transmitting on
There simply isn’t enough contiguous spectrum specific frequencies within the 320MHz channel where
available within the 2.4GHz or 5GHz frequency ranges interference is detected. This was optional in Wi-Fi 6,
to accommodate such an enormous data channel. but on next-gen networks it’ll be de rigueur.
However, the 6GHz band (as licensed in Europe)
offers a broad frequency range, stretching from Multi-band madness
5.955GHz to 6.415GHz. Wi-Fi 6E can only use a single We’ve mentioned that Wi-Fi 7 devices can use MIMO
160MHz chunk of that spectrum, but with Wi-Fi 7, to communicate across 16 antennae at once. However,
there’s enough space for a full-width 320MHz channel that only works on a single radio band. Wi-Fi 7 also
– plus a second, non-overlapping 160MHz channel introduces a new feature called Multi-Link Operation,
alongside it, should you want to run a second network. or MLO. This means devices can establish multiple
In the United States, the available frequencies go all simultaneous connections to the router across
the way up to 7.115GHz, allowing three 320MHz combinations of the 2.4GHz, 5GHz and 6GHz ranges.
This is how
Netgear envisages
channels to coexist without interference, and Ofcom It’s a revolutionary enhancement. Multiple radio
us all using its is currently considering whether to permit a similar bands have been supported since 802.11n, but until
Nighthawk RS700. expansion in the UK. An announcement is expected now, each device has had to connect to the router on a
single nominated band. The ability to aggregate two or
three links together enables bandwidth to be multiplied
up at a stroke.
In addition to increasing throughput, Multi-Link
Operation can provide more reliable wireless
connections; using traffic analysis and QoS rules, the
router can spot interference, calculate priorities, and
decide which frequencies to use for communicating
with different clients.

Gigabit slow
Most people’s wireless networks can already go faster
than their internet connection. There’s nothing wrong
with that – if it were the other way round, you’d be
paying your ISP for bandwidth you couldn’t use. But

TIMELINE: The when and where of Wi-Fi (continued)


2016: Wi-Fi 5 (802.11ac) Wave 2 2019: Wi-Fi 6 (802.11ax)
A few years after the initial rollout of Wi-Fi 5, the Wi-Fi Alliance As our homes became increasingly connected and networks
unveiled Wave 2, for Wi-Fi 5 devices that supported a range of grew increasingly congested, Wi-Fi 6 brought a new airtime-
enhanced technologies. These included a 160MHz channel sharing system called OFDMA, which allowed multiple devices
width, and an increase in the maximum MIMO configuration to interoperate simultaneously with minimal interference. QAM
from 3x3 to 4x4. Download speeds up to 6.8Gbits/sec were capabilities were upped to 1,024-QAM, and MIMO support was
theoretically attainable, and Wave 2 also introduced MU-MIMO, expanded to 8x8, for maximum connection speeds of 9.6Gbits/
allowing multiple devices to enjoy MIMO connections at once. sec. Wi-Fi 6 also brought uplink MIMO, enabling faster uploads.

80 LXF307 October 2023 www.linuxformat.com


Wi-Fi 7 IN DEPTH

I WANT MY WI-FI 7!
As with all Wi-Fi standards, US RRP is $699.99, which and BE550 variants, plus $1,199 for two units. As
Wi-Fi 7 devices can connect will probably translate to a a gamer-focused Archer with the Archer, there are
to older networks, but if you similar number of UK pounds GE800, but pricing for these cheaper alternatives – the
want the best performance, in the UK. hasn’t yet been revealed. BE65 and BE85 are rated at
you need a matching router – If that doesn’t appeal, On the mesh front, the star 11Gbits/sec and 22Gbits/sec
and the first Wi-Fi 7 models TP-Link has announced no of the show is the TP-Link respectively, with pricing
on the market are going to fewer than four Wi-Fi 7 Deco BE95, which offers and release dates yet to
be pretty pricey. routers, alongside three a massive total bandwidth be confirmed.
One example is Netgear’s mesh systems. The lead of 33Gbits/sec, including Finally, Asus has also
Nighthawk RS700, due to product is the Archer BE900, twin 6GHz radios rated at thrown its hat into the ring,
launch late September 2023. an imposing device that 11.5Gbits/sec each. Without with two initial Wi-Fi 7
This distinctive upright router matches the Netgear’s a doubt, it’ll be far faster than offerings. The RT-BE96U
promises a total throughput $699.99 price tag but boasts any mesh we’ve previously matches the Netgear’s
of up to 19Gbits/sec, with a cool touchscreen and a tested – the current 19Gbits/sec speed rating and
4x4 MIMO across the faster all-bands speed rating titleholder is the Wi-Fi 6E- its twin 10GbE ports, while
2.4GHz, 5GHz and 6GHz of 24Gbits/sec – achieved by powered Netgear Orbi the gaming-oriented ROG
radio bands. It also includes adding a second 5GHz radio, RBK963E, which offers an Rapture GT-BE98 adds a
10Gbits/sec Ethernet ports which means previous- aggregate connection speed second 5GHz radio, similar to
for both WAN and LAN ports, generation devices won’t of 10.8Gbits/sec across its the TP-Link Archer BE900.
to support next-generation interfere with full-bandwidth four radios. It’s also one of Currently there’s no release
internet connections and MLO connections. There are the most expensive systems date or pricing for these
high-speed wired clients. The also cheaper tri-band BE800 we’ve seen, launching at routers, but watch this space.

you might well be wondering, therefore, what the point depends enormously on the specific environment.
is in introducing even faster wireless. What we can say is that a typical latency of around
One answer is that internet connections keep on 10ms has been suggested for Wi-Fi 7, potentially
getting faster. In the labs, we’ve found that the latest falling as low as 1ms with the right hardware and a
Wi-Fi 6E routers transfer data at between 500 and strong signal. To put that into context, Nvidia’s cloud-
800Mbits/sec at short range, falling to 250Mbits/sec based GeForce NOW gaming service recommends a
in other rooms. In the next few years, as gigabit and latency of 40ms or less for an optimal experience –
multi-gigabit broadband lines become cheaper and suggesting that any lag from your Wi-Fi 7 router should
more widely available, a growing number of households be unnoticeable. Though the latency of your internet
will find that a Wi-Fi 6 router holds them back. connection might be another story, of course…
Remember, too, that not all networking involves The TP-Link
the internet. Our homes contain a growing number of Wi-Fi 7 is already in the building Archer BE900
smart appliances, which are continually talking to hubs If you’re eager to get your mitts on a device with a offers 10Gb/s
Ethernet linked
and to one another. And while we’re storing more and shiny Wi-Fi 7 logo, you don’t need to wait until next
to 24Gb/s Wi-Fi 7
more data in the cloud, domestic NAS systems remain year. Broadcom has been shipping fully featured Wi-Fi for maximum
CREDIT: TP-link, Qualcomm, Netgear

popular for convenient shared storage and bulk 7 chipsets to device manufacturers since April 2022, throughput.
archival. The huge bandwidth of Wi-Fi 7 can keep and both Qualcomm and MediaTek are now offering
all this data flowing swiftly. their own Wi-Fi 7 solutions.
There’s another factor to consider, too. Wi-Fi 7 In fact, two fast-moving Chinese manufacturers
doesn’t aim only for faster transfers, but also for lower are already offering Wi-Fi 7-enabled smartphones,
latency. That means it’s ready for the incoming age of namely the OnePlus 11 5G and the Xiaomi 13 Pro.
game streaming and extended reality – applications Other flagship Android phones such as the Samsung
that demand a near-instant response to user input. Galaxy and Google Pixel series will likely follow suit in
It’s hard to put a figure on the benefit compared to their next generations. iPhone fans may need to wait
earlier Wi-Fi standards, because real-world latency a little longer, as Apple tends to lag behind the curve
when it comes to Wi-Fi – the iPhone 15
is expected to ship with Wi-Fi 6E.
It’s a similar situation with
computers. 802.11be expansion cards
will probably appear in the second half
2020: Wi-Fi 6E (802.11ax)
More a variant than a true standard, Wi-Fi 6E is a version of of 2023, which means custom-built
Wi-Fi 6 that adds support for connections in the 6GHz radio PCs with Wi-Fi 7 are likely only a
band. Otherwise the encoding and transmission systems are matter of months away – and existing
identical to those in Wi-Fi 6 – but reduced interference in the systems with an accessible PCIe or
higher frequency range means that 6E devices often achieve M.2 2230 slot should be easily
better real-world performance than a standard Wi-Fi 6 upgradable. Intel says the new Keep an eye out
connection on the 5GHz band. networking tech will be standard for the new Wi-Fi
on Core-powered PCs in 2024. 7 certification.

www.techradar.com/pro/linux October 2023 LXF307 81


GET ALL THE ESSENTIAL BREAKING
NEWS FOR THE TECH ENTHUSIAST!
No matter if you're building a PC,
buying a laptop or learning about
robots, Tom's Hardware has all the
comprehensive knowledge you need.

Scan & Subscribe


for free!

Make Python work for you with


tutorials on coding with Django, Flask,
Pygame and even more useful third-
party frameworks.
THE BEST NEW OPEN SOURCE SOFTWARE ON THE PLANET

Mayank Sharma
will offer to be gatekeeper if
OnionShare Bulky Sweeper KDiskMark Min they make a Star Wars/Star
Trek crossover movie, and
OnionMedia X Pwall Nostlan DevilutionX turn people away so they do

Paper Clip Menu Editor


something meaningful, like
read HotPicks.

FILE SHARING

OnionShare
Version: 2.6
Web: https://onionshare.org

here’s a growing list of secure file transfer

T services that help you ferry large files


across the internet without placing trust in
centralised services such as Dropbox or Google Drive.
But then again, these security-centric services usually
require you to create an account or employ other
means to ensure your transfers aren’t anonymous.
OnionShare, which transfers files over the Tor
network, can help you maintain both.
There are various ways to install OnionShare for In addition to sharing files, you can also use OnionShare to chat anonymously, and even create
Linux, but the recommended way is to use either the censorship-proof websites on the Tor network.
Flatpak or the Snap package. You can grab the app
from FlatHub with flatpak install flathub org.
onionshare.OnionShare . LET’S EXPLORE ONIONSHARE...
The first order of business after firing up the app
is to smash the Connect To Tor button. You can also
toggle the auto-connect option to save yourself a 1
click. After you’ve latched on to the Tor network, the
app shows you the four buttons available for its four
different functions. 2 3
To share files, select the Share Files option and just
add the files or folders you wish to share. The app
then generates a .onion URL that you have to pass on
to the recipient, along with the private key. You can
optionally make the share public, which makes the
files available to anyone with the .onion URL.
The person at the other end doesn’t need the 4
OnionShare app. Instead they have to use the Tor
Browser to open the URL, along with the private key
to download the files. You can also ask the app to
show a QR code for the URL as well as the public key.
You can also run OnionShare in Receive mode, Tabs Track shares
which enables people to upload files into your 1 You can use OnionShare to run multiple 3 OnionShare keeps track of the files you
computer. Think of it as a sort of a personal dropbox. shares or functions concurrently, each of which have shared, whether they are downloaded
You can also use the application to publish a static runs in its own tab. separately or as a bundle.
website on the Tor network with the Host A Website
Shared files Share details
option. It asks you for the HTML and other files that 2 Displays both the name and size of 4 These are the .onion URL and the private
make up your website, and then spits out the .onion all the files that are being shared, along with key any recipient needs in order to download
URL for your site. their totals. the shared files.

www.techradar.com/pro/linux October 2023 LXF307 83


HOTPICKS

Instead of working
FILE RENAMER with characters,

Bulky
advanced users
can use Bulky to
find and replace
names with regular
expressions.

Version: 2.10 Web: https://github.


com/linuxmint/bulky

ven though Linux does a decent job of

E renaming multiple files at once, certain


operations require the finesse of a more
specialised tool.
Bulky is a simple tool for renaming multiple files
and folders in Linux. It’s developed by the Linux Mint
distro, but it works on other Deb-based distributions the Replace field. To help you, the application
as well, and supports multiple desktop environments, automatically displays the original and the replaced
from Mint’s home-grown Cinnamon and Mate, to name as per the details you have entered in the
mainstream ones such as Gnome. preview window on top. When you are satisfied,
To install the utility, download the latest release from hit the Rename button.
its GitHub page. Extract the contents with tar xvf By default, the app renames files by finding the
packages.tar.gz . Now head to the extracted packages specified characters and replacing them with the new
directory, right-click the DEB file and choose the Open ones. However, you can ask Bulky to remove or insert
With Another Application option. Select Software characters from the filename, and even change the
Install from the program list, and click the Install button case of certain ones. In all cases, the app gives a lot
to install the app and any required dependencies. of dexterity to change the characters.
The app has a straightforward interface. Begin by Similarly, by default the app acts on the name of the
using the + button to point Bulky to the files that you file. But you can use the drop-down to make it act on
want to rename. Now enter the name you wish to the extension – for instance, change all .png to .jpg – or
replace in the Find field, followed by the new name in even the entire filename.

Sweeper can help


TEMP FILE CLEANER increase your

Sweeper
privacy without
much effort,
especially on
systems that are
shared between
multiple users.
Version: 23.04.3
Web: https://apps.kde.org/sweeper

here’s no dearth of system cleaners on Linux.

T What sets Sweeper apart is its focus on


removing crud that puts your privacy at risk.
Installing it is pretty simple because it’s available as
a Snap package. If you’ve added support for installing
Snap packages in your distro, you can install the app
itself with sudo snap install sweeper . For additional privacy, you can also select the option
There are two main elements that the app is to clear all the accumulated cookies preserved by the
designed to scrub, which are organised in two self- websites you’ve visited. While you’re at it, you might
explanatory sections: General and Web Browsing. also choose to clear out the cache favicons from
In the General section, you get options to help clear visited websites, along with the option to even get rid
the list of recently used apps currently advertised of the cookie policies from the visited websites.
in the KDE menu for everyone to see. Similarly, there’s Remember that although you can technically
also the option to wipe the entire history of commands install the app on non-KDE desktops, it only works its
you’ve executed through the Run Command tool. magic on top of a KDE desktop. Secondly, just like the
Finally there’s the option to zap all cached thumbnails. previous utility, the one thing that makes Sweeper a
The Web Browsing section offers a lot more breeze to use – its simplicity – can also be seen as a
options. For starters, you can select the options to hindrance. Its lack of dexterity, while appealing to first-
clear the web history, pairing it with the ability to time users, wouldn’t impress experienced campaigners
empty the temporary cache, as well as the form who’d prefer something more thorough in its approach,
completion entries. such as rmLint (see LXF304, p.87).

84 LXF307 October 2023 www.linuxformat.com


HOTPICKS

If you’re using the


DISK BENCHMARK AppImage version,

KDiskMark
fire it up from the
CLI with superuser
privileges to get
more accurate
results.

Version: 1.4 Web: https://github.com/


JonMagon/KDiskMark

here are various reasons for benchmarking

T hardware. You might do it simply to compare


your hardware with someone else’s, or to
verify that the new hardware is actually performing as
advertised, or just to ensure your old hardware hasn’t
lost its sheen.
There are tools that can benchmark all kinds of
hardware, and then there are specialists designed of 1GB, and the read and write tests are performed
to probe a specific piece of kit. KDiskMark is the five times, with a default time interval of five seconds
latter and is meant to measure the performance of between each test. You can adjust these settings using
storage drives. It can determine read and write speed the buttons adjacent to the All button.
estimates with good accuracy for both hard drives Once it’s done, you get the results in two columns,
and solid state drives. It can also run benchmarks on namely Read and Write. The four rows are the various
external drives connected to your Linux system. testing methods that are used for determining the
Despite being a KDE utility, you can use it on any speeds, with different CPU thread and cache usage.
desktop on any Linux distro, because it’s available as You can compare these figures against the advertised
an AppImage. Just grab the latest release from its speed of your disk.
GitHub page, make it an executable with chmod +x Head to Settings > Queries & Threads to fiddle with
and double-click on the file to launch it. the settings if you know what you’re doing. Better still,
You can then press the All button to initiate the head to Profiles to pick a predetermined profile that
benchmark. By default, it runs the test with a block size automatically sets the test parameters for you.

WEB BROWSER

Min
Version: 1.28.1
Web: https://minbrowser.org

here certainly isn’t a lack of web browsers,

T and they are constantly trying to outdo the


competition by rolling out new features. Min
takes a different approach. As its name suggests,
Min is a minimalist browser designed to let you browse
without distractions. And while it doesn’t have the bells
and whistles you get with mainstream alternatives, Min
isn’t really a pauper either, and bundles quite a lot of the page you’ve visited, which is pretty handy when you With browser
most useful browser functionalities. don’t remember the title of the page. actions, you
can control Min
The project offers pre-compiled binaries for both Also, Min has a built-in ad blocker. By default it
from the search
DEB and RPM-based distros. Just grab the ones for blocks third-party ads, but can also be configured bar. Type ! to
your distribution and install them with the default to block first-party ads. Furthermore, Min also blocks get a whole list
package manager. trackers for added privacy. And it’s got a password of actions.
The browser does appear pretty bare-bones, but it’ll manager, plus a bookmarks manager.
grow on you. It has tabs, but unlike with mainstream Another feature you get with Min is a reading mode
browsers, tabs that you’ve haven’t looked at in a while called Reading List. When enabled, it removes most of
fade out in Min. If you have too many of them, you can the cruft from a page, enabling you to focus on the text.
split them into groups for better organisation. Talking of focus, Min also has a Focus Mode that hides
Min uses DuckDuckGo by default, but you can swap all tabs except the one you’re currently viewing. It also
it out with any other search engine. Talking of searches, prevents you from opening other tabs to make sure you
Min allows you to search through the full text of every don’t wander off.

www.techradar.com/pro/linux October 2023 LXF307 85


HOTPICKS

MEDIA DOWNLOADER & CONVERTOR

OnionMedia X
Version: 2.0.0.1 Web: https://github.
com/onionware-github/OnionMedia-X

he Linuxsphere has some of the best media

T tools and libraries out there. OnionMedia X


combines two of these, namely yt-dlp and
FFmpeg, to enable you to download videos from
several popular streaming platforms and then convert
them into virtually any format.
The app is available as a Flatpak and can be installed supports hardware-accelerated encoding to speed up OnionMedia X ships
from FlatHub with flatpak install flathub io.github. the conversions. with adequate
defaults, but
onionware_github.onionmedia . To download video, switch to the Media Downloader you can use the
By default, OnionMedia X launches in the Media tab, where you get a search bar that you can use to Settings section to
Converter mode. You can use the Add button to point hunt for videos you want to download from YouTube. tweak any of them
it to a single or multiple video files on your disk. The You can also paste a direct URL for the video you wish as per your needs.
app analyses them and displays all the relevant to grab. While the search function looks for videos on
information, such as resolution, aspect ratio and more, YouTube, you can paste the URL from other streaming
which you can then modify as per your liking. The app services as well, such as Vimeo and SoundCloud.
also offers presets to assist you in the conversion You can add multiple videos to the queue and
process. You also have several presets to extract just download them at the same time. For each one, you
the audio from the video files. can select a resolution to download the video, or
While you’re at it, you can also append (or edit) choose to only download the audio of the file. You also
tags, such as the title, description, artist details and get a slider that helps you clip and download only a
more, to your converted media files. OnionMedia X also specific segment of the file.

PHOTO MANAGER

Pwall
Version: 2.1-4 Web: https://github.
com/ltiber/pwall

f you’re as trigger-happy as us (and who isn’t

I these days?), we don’t need to explain the


benefits of an efficient image-management
tool. Luckily, Linux isn’t short of image viewers and
your distro probably ships with one as well.
However, while these tools, and even modern
file managers, do a good job of handling a reasonably Once done, Pwall shows the folders of your library’s Pwall can also
small collection, you really need a purpose-built photo main directory in the left pane and a photowall in the share selected
manager, such as Pwall, to help sort through your right. You can use the photowall to scroll through your images to your
default mail app,
growing library of images. images. Double-click on an image to view it full-screen. Facebook or
Pwall supports most image formats, and has all the The right-click context menu provides you with WhatsApp Web
necessary photo management and organisation tools different options depending on which pane you’re in. with a single click.
you might need. It’s available as a Flatpak and can be With the left pane, you get options to rename the
installed from FlatHub with flatpak install flathub folder, or to move it to another location. You can also
io.github.ltiber.Pwall . create new folders and even delete existing ones.
When you launch it for the first time, you’re asked to There’s also the option to search for photos.
point the app to your photo library. You can obviously On the photowall, the context menu enables you
change this location later from within the app. Pwall to copy or move the selected images to a different
then scans your library and creates thumbnails of location. You can also view their properties, and ask
all the images in there, which can take some time, the app to open them in Google Maps based on their
depending on the size of your library. location EXIF data.

86 LXF307 October 2023 www.linuxformat.com


Games HOTPICKS

RETRO GAME LAUNCHER

Nostlan
Version: 2.2 Web: https://quinton-
ashley.github.io/nostlan-web/

inux has become a hot new thing when it

L comes to mainstream gaming, but it’s also the


go-to platform for retro gaming enthusiasts.
As a Linux user you have access to a plethora of
emulators that can recreate all the popular gaming
machines of yore. ROMs inside the respective gaming directory under Nostlan’s 10-foot
With Nostlan, you can save yourself a lot of time ~/Document/emu and the launcher can pick them. UI is one of the
distinctive features
and effort by playing games across different emulators Although you can navigate Nostlan using a mouse
of the app that
all from under one roof. The launcher supports a whole and keyboard, it’s designed to be used with a game helps set it apart
load of emulators to give you access to gaming controller. Best of all, most controllers work with from other
platforms including the Nintendo DS, 3DS, PS2, PS3, Nostlan automatically, with no need for prior setup. launchers, and
Wii, Xbox 360 and more. When you select the system, the app looks good across
laptops, big TVs,
On Linux, the cross-platform game launcher is automatically detects the game ROM and downloads and projectors.
available as a distro-agnostic AppImage. Grab the the appropriate artwork. When you click Play, it
latest release from its website, and give it executable invokes the emulator required to play the ROM.
permissions either using the file manager or with the One handy feature of Nostlan is that if it can’t find
chmod +x command. an emulator to play a ROM, it offers to fetch and
On first launch, Nostlan runs through a small setup install the relevant one for you. Although you can use
wizard to help you pick the default language and the app for free, joining its Patreon gets you access
choose its working directory. The app suggests to additional features, such as the ability to back up
~/Documents/emu. Make sure you copy your gaming your game save data to local storage or to the cloud.

RPG

DevilutionX
Version: 1.5.0 Web: https://github.com/
diasurgical/devilutionX

evilutionX is a port of Diablo and its Hellfire

D extension pack for modern machines. It also


expands new features to its gaming engine
and gameplay, while ironing out bugs.
The game is available as a Flatpak and can be
installed from FlatHub with flatpak install flathub org.
diasurgical.DevilutionX . To play, you need the MPQ mode, and within the game, you can press and hold DevilutionX
has several UI
files from the original game. the mouse to continue to attack and lock on target.
improvements over
To get you hooked, DevilutionX includes a Other helpful gameplay improvements include the original, such
shareware version of the game, but for the full gaming the ability to shift-click on items for quick actions. as the ability to
experience, you need to purchase the original from For instance, shift-click consumables to move them view other players
GOG, extract several MPQ files (using the Innoextract between the belt and the inventory or your stash, or on the map.
utility), and place them in ~/.var/app/org.diasurgical. shift-click equipment to equip from or unequip to
DevilutionX/data/diasurgical/devilution: the inventory or your stash.
$ innoextract -I DIABDAT.MPQ -I hellfire.mpq -I One of the best engine improvements are the
hfmonk.mpq -I hfmusic.mpq -I hfvoice.mpq ‘setup_ three modes for setting up multiplayer games. You
diablo_1.09_hellfire_v2_(30038).exe’ can play over the Zerotier network that provides the
$ mv hellfire/h*.mpq ~/.var/app/org.diasurgical. easiest way to play with others over the internet.
DevilutionX/data/diasurgical/devilution Besides this, the DevilutionX port supports high
Some of the improvements with DevilutionX include FPS, and can upscale to desktop resolutions and
the ability to select the difficulty level in single-player expand to the aspect ratio of modern monitors.

www.techradar.com/pro/linux October 2023 LXF307 87


HOTPICKS

Paper Clip
PDF METADATA EDITOR doesn’t have

Paper Clip
any configurable
parameters, but
you can ask it
to open the PDF
in an external
PDF viewer.
Version: 3.2 Web: https://github.com/
Diego-Ivan/Paper-Clip

nlike images and videos, metadata in PDF files

U doesn’t pose a threat to your privacy. However,


PDF metadata is pretty handy if you are a
writer, a student, or anyone who manages hoards of
digital documents.
Appending the right kind of metadata helps you
sort through your documents a lot more efficiently.
And if you’re sharing the document online, having the
correct metadata also endears it to search engines,
making it easier to find. Paper Clip is a nice little utility can also edit or delete the name of the software
that you can use to view and edit all the essential used to create and convert it into a PDF, along with
metadata embedded in a PDF file. the date of creation and last modification.
The app is distributed as a Flatpak via FlatHub and All of these metadata attributes are optional and
can be installed with flatpak install flathub io.github. you can choose to delete the existing data – say, for
diegoivan.pdf_metadata_editor . instance, if you don’t want people to find out what
In Paper Clip’s straightforward interface, start by software you used to create the PDF.
pointing it to a PDF file. Unlike a PDF viewer, Paper In addition to viewing and editing these essential
Clip doesn’t display the contents of the PDF file, but metadata attributes, you can add as many keywords
instead shows its metadata. as you want, which helps improve the file’s
You can edit or add basic details such as the title of discoverability. When done, head to the hamburger
the file, along with its subject and author’s name. You menu and hit Save to burn them into the PDF.

Depending on your
MENU EDITOR distro, changes

Menu Editor
made by Main
Menu might not
show up until you
log out and log
back in.

Version: 1.0
Web: https://codeberg.org/libre-
menu-editor/libre-menu-editor
s its name implies, Menu Editor enables you to

A make changes to your desktop’s application


menu. It works with different desktops, such
as Gnome, KDE, Xfce, and can create new launchers,
as well as modify existing ones.
On top of that, you can use it on any distro because
it’s available as a distro-agnostic Flatpak, which you The app gives you the option to filter the list of
can install with flatpak install flathub page.codeberg. launchers by showing hidden and disabled launchers
libre_menu_editor.LibreMenuEditor . in the sidebar. You can also find launchers by using
When you fire up Menu Editor, it displays a long list the search bar. In addition to editing existing ones,
of all the apps installed on your system in the left pane. you can also use the app to create custom launchers.
You can then click on any of them to reveal options to One of Menu Editor’s many interesting options is
tweak their existing values in the right pane. its ability to create, edit and remove launcher actions.
For starters, you can change their name and icon. These are custom entries that show up when you
The app has a toggle at the top of every app launcher right-click on the app launcher, such as the option to
that you can turn off to prevent the app from showing open a new private window in Firefox.
up in the Applications Menu. Head to the hamburger Experienced users can also ask Menu Editor to
menu and select Delete Launcher to remove an app open the launcher configuration files in their text
launcher for good. If you’ve messed up, the hamburger editor, in case you ever need to add comments to
menu has an option to reset launchers to their defaults. explain a change.

88 LXF307 October 2023 www.linuxformat.com


CODING ACADEMY
CODING ACADEMY Text adventure

LXF ADVENTURE Part four!


Catch up by
ordering back
Credit: https://github.com/azuregate
issues on

Text adventures:
page 62!

now in full colour!


Nate Drake embraces ancient graphics and dinky sound effects
in the final part of our text adventure coding series.

hat dungeon would be

W complete without a splash of


paint? While text adventures
traditionally are just so, that doesn’t
mean you need to make your player
OUR suffer through endless screens of
black and white. Plenty of simple
EXPERT text games incorporate elements of
Nate Drake colour, sound effects and even simple
wants to graphics, which are the focus of the
dedicate this final part of this series of tutorials.
series to his If you’ve been following the
dad, who once previous articles in this series, by
told him that no now your text adventure should be
one was ever starting to take shape. Your character You can use the coloroma module to change the text colour and style.
going to pay him can move freely between rooms, Here the room name is shown in a more striking font.
to sit around interacting with items. Some are
and play helpful and some hinder them. Through introducing Next, let’s try to update the listinventory procedure
video games. HP (hit points), players now have a vested interest in to show separate values, such as the player name,
keeping their character alive. using different colours:
The combat mechanic, while basic, also enables def listinventory():
them to take turns hitting whatever creatures you # Print player information in a separate colored
spawn, then (hopefully) rifle their cold, dead corpses section
You can find a for loot. print(Fore.YELLOW + “+-------------------------+”)
full list of ANSI If you’re a particularly gifted graphic designer, you print(“|”, f” {player.name}’s Inventory “, “|”)
escape codes could spend weeks crafting cunning polygonal images print(“| HP:”, player.hp, “ “ * (20 - len(str(player.hp))),
for both the and create your fully graphical game from scratch. “|”)
foreground and Even if you’re less artistically inclined, though, there’s print(“+-------------------------+”)
background no reason why your text adventure can’t be a little print(Style.RESET_ALL)
colours at
easier on the eye. # Print the inventory items in a separate colored
https://t.ly/
Since Python games can be run from the terminal, section
fvUmx. Take
some time to you can harness its potential to show different text if player.inventory:
experiment with fonts and colours. print(Fore.CYAN + “You are carrying:”)
different effects The easiest way to do this is through the colorama for item in player.inventory:
but remember module, which supports various text effects. If you print(f”- {item.name}”)
that some don’t already have this installed, open your terminal print(Style.RESET_ALL)
codes affect and run: else:
other aspects $ sudo apt install python3-colorama print(Fore.CYAN + “Your inventory is empty.”)
of the terminal, You can now get started by adding the following at print(Style.RESET_ALL)
such as the
the start of your Python script: As you can see, by adding Fore.COLOUR to the
cursor position.
from colorama import Fore, Style print command, the terminal outputs all text in that

90 LXF307 October 2023 www.linuxformat.com


Text adventure CODING ACADEMY

colour until it receives another command. This is why


the first two lines (both player name and the number of
HP) are in yellow. You can make use of the RESET_ALL
command to return text settings to default.
You can also use the Style attribute to good effect
when you want to make certain text stand out. For
example, you could use bright to make the title of a
room stand out:
print(Fore.CYAN + Style.BRIGHT + player.
currentroom.name + Style.RESET_ALL)
print(Fore.WHITE + player.currentroom.description)
Here the RESET_ALL command is invoked to set
the style back to normal for the room description.
You can download a sample script with these
colour effects from: https://github.com/azuregate/
lxfpythontextadventure/blob/main/
testroomcolorscript1.py enemy = room_enemy The time module
can be used
break
to change the
Green and read all over if enemy and enemy.alive: speed at which
Using the coloroma module to display text has a print(f”\033[31mA battle begins with the {enemy. text is displayed,
number of advantages, chief among which is that it’s name}!\033[0m”) adding a little
very easy to read and tweak instructions using actual while enemy.alive and player.hp > 0: more anticipation
to combat.
names of colours such as YELLOW and CYAN. player_damage = player.weapon.damage
If you prefer, though, you can display coloured text enemy.hp -= player_damage
using the corresponding ANSI escape codes instead. print(f”\033[32mYou hit the {enemy.name} with your
This can make the code more difficult to read because, {player.weapon.name}. It causes {player_damage}
for instance, you need to remember that a value such damage.\033[0m”) The sounds of
as \033 corresponds to red. if enemy.hp <= 0: the battlefield
On the plus side, you don’t need to use any external enemy.alive = False in this tutorial
libraries, making your code much leaner. We don’t print(f”\033[31mThe {enemy.name} has been have been
insist on one particular approach, so feel free to try out defeated!\033[0m”) provided by the
both colorama and raw ANSI codes to see which suits lootbody(enemy) good people
of https://
you better. break
freesound.
You can use this to make combat a little easier to enemy_damage = enemy.weapon.damage
org. Be sure to
follow by making your attacks appear in green and your player.hp -= enemy_damage check you have
enemy’s attacks red: print(f”\033[31mThe {enemy.name} hits you with its the permission
def fight(enemy_name): {enemy.weapon.name}. It causes {enemy_damage} of the creator
current_room = player.currentroom damage.\033[0m”) before using
enemy = None checkhp() any sounds in-
if player.weapon is None: if player.hp <= 0: game. Pygame
print(“You can’t fight without a weapon!”) print(“\033[31mYou have been defeated! Game supports
return Over.\033[0m”) playback of
WAV, MP3 and
for room_enemy in current_room.enemies: exit(0)
OGG files.
if room_enemy.name.lower() == enemy_name.lower(): else:

INTRODUCING IMAGES
The text adventure genre is such that Add these lines to the top of the if os.path.exists(image_path):
the illusion is rather ruined by images. Python script in which you want images: display_image(image_path)
They can be a welcome distraction but from PIL import Image else:
if you don’t have them for every area, import os print(“Image file not found.”)
players may complain they feel cheated. You can now create a procedure to Make sure to update image_path to
Unlike text, images also don’t always load images: the actual path for your image. If you
appear in the same way when run on def display_image(file_path): plan to do this on a room by room basis,
different systems. try: you may want to add a new image_path
This is why we haven’t used images in img = Image.open(file_path) attribute to the Room class, similar
this series of tutorials but, as Bob Ross img.show() to how we streamlined the sound
would say, this is “your world”, so if you except Exception as e: procedure (see box, page 92).
want pictures, you should have them. print(“Error:”, e) Note that these commands will
To get started, you need to install the display images only in your player’s
powerful Pillow image-processing library image_path = “/home/yourusername/ default image viewer. If you actually
via the terminal: image.jpg” want to display them in-terminal, you
$ sudo apt-get install python3-pil probably need a specialised emulator.

www.techradar.com/pro/linux October 2023 LXF307 91


CODING ACADEMY Text adventure

print(“There is no such enemy here.”)


Take a moment to run this in your terminal.
You can
download an Building anticipation
example script Now that you’re comfortable altering the style and
containing colour of text, you can start to incorporate this
all the code elsewhere into your code.
used in this In the sample script, there’s a good example of this
and previous using alternating red and green text to make combat
tutorials
a little clearer, but it doesn’t do much to heighten
from https://
excitement when it’s happening. This is because
github.com/
azuregate/ the results of combat are processed by the terminal Use the progressbar2 module to show your player’s HP in a graphical
lxfpythontext almost instantly. bar. Wrapping this into a procedure means you can call it at any time –
adventure/ You can fix this and build a little anticipation using for example, during combat.
blob/main/ the Python time module. This enables you to control
adventure4. how and when events happen. Get started by This is fine as far as it goes but isn’t particularly easy
py. Remember initialising the module at the top of your Python script: on the eye. Luckily, Python modules come in to their
you need to import time own once again here, namely progressbar2, which can
run this in a Next, let’s create a procedure for when you want to display your player’s HP with a nifty graphic.
terminal utility
write your text slowly: To get started, install the necessary module by
to experience all
def typewriter_effect(text, delay=0.1): opening the terminal and running:
the colour and
sound effects. for char in text: $ sudo apt install python3-progressbar2
print(char, end=’’, flush=True) Add the following line to the start of your script:
time.sleep(delay) import progressbar2 as progressbar
print() You can now add a specific procedure to display
The beauty of creating a set procedure for this is your new power bar:
that from now on, you can just swap out the plain old def showhpbar():
print command for typewriter_effect , for instance: progress = player.hp / 10.0 * 100
if enemy and enemy.alive: bar_length = 20
typewriter_effect(f”\033[31mA battle begins with the filled_length = int(bar_length * progress // 100)
{enemy.name}!\033[0m”) bar = ‘’ * filled_length + ‘-’ * (bar_length - filled_
Modify your code accordingly or run the example length)
script to see how this works in practice. Don’t be afraid print(Fore.GREEN + f”HP: [{bar}] {player.hp}/10 HP”)
to tinker with the delay value (currently 0.1) to change return
the speed at which text is shown. Finally, scroll down to the listinventory procedure
and replace:
Pilgrim’s lack of progress print(Fore.GREEN + “HP:”, player.hp)
In the previous tutorial in this series, we introduced with:
player HP, or hit points. Your character starts out with showhpbar()
10 and can check their current HP by running the Having a dedicated procedure to show a graphic of
INVENTORY command at any time during gameplay. your remaining HP makes it easy to display the power

STREAMLINING SOUND
In this tutorial we cover how to create procedures to insert the You can now replace individual sound procedures, such as
sounds of weapons during combat. While this might make for play_sword_clang, with a more generic one:
a more immersive experience, it’s not very efficient because def play_player_weapon_sound():
it requires you to create a specific procedure for every single sound_file_path = player.weapon.sound_path
weapon. If you want to streamline your sound process, add a playerweapon_sound = pygame.mixer.Sound(sound_file_
new sound_path attribute to the Weapon class: path)
class Weapon(Item): playerweapon_sound.play()
def __init__(self, name, itemdesc, updroomdesc, portable, return
revealsitem, usedin, usedesc, removesroomitem, Finally, you need to modify the fight procedure to play the
addsroomitem, useroomdesc, disposable, damage, sound_path): correct sound for the weapon the player is currently wielding
super().__init__(name, itemdesc, updroomdesc, portable, each time they use it:
revealsitem, usedin, usedesc, removesroomitem, while enemy.alive and player.hp > 0:
addsroomitem, useroomdesc, disposable) player_damage = player.weapon.damage
self.damage = damage enemy.hp -= player_damage
self.sound_path = sound_path play_player_weapon_sound()
You can now add the path to the sound file for each weapon: For convenience, you can download an example of this
sword = Weapon(“Sword”, “A sharp and sturdy sword.”, None, more efficient code from:
True, None, 0, “You swing the sword around with great skill.”, https://github.com/azuregate/lxfpythontextadventure/blob/
None, None, None, False, 2, “/home/nate/mu_code/sword.wav”) main/nextroomsoundscript2.py

92 LXF307 October 2023 www.linuxformat.com


Text adventure CODING ACADEMY

sword_sound.play()
return
As you can see here, the path to the sound file
sword.wav (which you can also retrieve from Nate’s
GitHub repo) needs to be modified to make it work
with your game. Make sure the media file is in the same
folder as your Python script.
You can now modify the fight procedure to play
the sound:
while enemy.alive and player.hp > 0:
player_damage = player.weapon.damage
The Pygame library supports sound playback. Here the sword and enemy.hp -= player_damage
mace sounds can be called via separate procedures. You can find a play_player_weapon_sound()
more efficient implementation of sound in the box, below-left. typewriter_effect(f”\033[32mYou hit the {enemy.
name} with your {player.weapon.name}. It causes
bar at other times as well, such as during the {player_damage} damage.\033[0m”)
fight procedure. The example script also supports playback of a file
enemy_damage = enemy.weapon.damage mace.wav for whenever the enemy hits your player
player.hp -= enemy_damage during combat.
typewriter_effect(f”\033[31mThe {enemy.name} hits These effects work well for the example script but
you with its {enemy.weapon.name}. It causes {enemy_ aren’t the most efficient way to code, given you have to
damage} damage.\033[0m”) create and invoke a new procedure to play each sound
showhpbar() effect. See the Streamlining Sound box (opposite page)
As things stand, the HP bar is always displayed in for a more efficient implementation of this.
green. If you want to colour-code it depending on how
many hit points you have remaining, add the following: Further reading
if player.hp >4D By now, you’ll be well on your way to a visually stunning
Finally, change the last print command in the text adventure. In this tutorial, we’ve only made a few
showhpbar procedure to: small tweaks to sample scripts in order to encourage
print(hp_color + f”HP: [{bar}] {player.hp}/10 HP”) you to be creative.
You can download an example of this script that For instance, sound effects only currently play
shows the HP power bar in the player’s inventory and during combat, but you may want them to do so when
during combat from: https://github.com/azuregate/ players use stat items, which increase or decrease
lxfpythontextadventure/blob/main/ their health. Consider also colour-coding the various
testroomprogressbar1.py exits in the game to assign shades to each direction,
because this may make it easier to navigate.
Sounds and sorcery You also may want to experiment more with text
CREDIT: Stephen Roy (https://www.flickr.com/photos/nynyny/2545392976/in/photolist)

Although text adventures aren’t especially rich in effects, changing sizes and the way in which they’re
media, some, like Sherlock Holmes: The Riddle of the displayed. Although text adventures usually shy away Although we’re
Crown Jewels, put sound effects to good use, such as from full-blown images (see Introducing Images box, against images in
by playing a cacophony of discordant notes if Doctor page 91), you could consider using some ASCII art. text adventures in
general, there’s no
Watson tries to play Holmes’s Stradivarius violin. Once you’ve finished your game creation, please
reason you can’t
Sound is one of the many supported features in don’t hesitate to contact us at Linux Format to show include a helpful
Pygame – a collection of modules that, believe it or off your sprawling Python adventure. in-game map.
not, are specifically designed to help Python game
creators. To get started, make sure you have Pygame
installed by opening the terminal and running:
$ sudo apt install python3-pygame
Next, open your script and add the following line at
the start:
import pygame
Initialise Pygame by adding:
pygame.init()
If you take the time to download the example
script from https://github.com/azuregate/lxfpython
textadventure/blob/main/nextroomsoundscript1.py,
you’ll see that there is a dedicated procedure for
playing the sound of a sword each time the player
uses it in combat:
def play_sword_clang():
sound_file_path = “/home/nate/mu_code/sword.wav”
sword_sound = pygame.mixer.Sound(sound_file_path)

EXPLORE OUR SUBSCRIPTIONS! Subscribe now at http://bit.ly/LinuxFormat

www.techradar.com/pro/linux October 2023 LXF307 93


CODING ACADEMY Breakout

PYGAME Part two!


Don’t miss
Credit: www.pygame.org next issue,
subscribe on

Blast apart classic


page 16!

Breakout gaming code


Matt Holder discovers that rewriting a classic game isn’t as simple
as he first thought, so he has plenty of tips to ease the process.

e’re continuing our recreation of the classic

W game of Breakout. In this game, the player


controls a paddle, which is moved across the
screen, left and right, so that a ball can be bounced
between the paddle and a number of bricks that are
OUR rendered on the screen. The collisions between the
ball and the bricks causes damage, and bricks can
EXPERT then be destroyed. The game contains a number of
Matt Holder power options, such as speeding up the ball, creating
has worked in extra balls, creating an extra paddle, and a laser, which
IT support for fires laser pulses at the bricks, which then causes them
over a decade, to disintegrate.
and always tries Part one of the article, LXF306, described the basic
to utilise Linux mechanics and explained the majority of the classes
alongside the that are being used to describe the various objects.
other installed In this part of the article, we are creating the in-game
systems. logic, which is used to detect keypresses and move the
paddle. The source code of the game is available on
GitHub, and as well as following along with the article,
this commented code is required to get the game to
function as intended. The following code sample shows The recreated game is called Paddle Smash and can be seen here.
an extract from the Bricks.py file:
from BaseSprite import BaseSprite self.collisionsRemaining -= collisionPower
class Brick(BaseSprite): self.alpha -= self.alpha / self._numCollisions
def __init__(self, width, height, positionX, positionY, self.setAlpha()
colour, powerValue=None, numCollisions=1): if self.collisionsRemaining == 0:
super().__init__(width, height, positionX, positionY, self.kill()
image=None, spriteType=”rectangle”, colour=colour, def setAlpha(self):
powerValue=powerValue) self.image.set_alpha(self.alpha)
self._powerInstigated = False In this code sample, we import any necessary
self._numCollisions = numCollisions libraries before defining a new class, which inherits
self._collisionsRemaining = numCollisions from the BaseSprite class. This time, extra variables
self._alpha = 255 required are related to the number of collisions
... necessary to destroy the brick, how many collisions
@property are remaining, and when the power value has been
def powerInstigated(self): used. Next in the sample, we have a number of getters
The code for the return self._powerInstigated and setters to return and set variables from outside of
recreated game ... the initialisation function. We then have a function that
can be found at def registerCollision(self, collisionPower=1): we call when a brick is collided with. This allows for the
https://github. if self.collisionsRemaining != -1: brick to be destroyed when the required number of
com/matt if collisionPower == -1: collisions has been met. Finally, we have a function that
mole/LXF
collisionPower = self.numCollisions is used to set the alpha of our bricks, so that for each
PaddleSmash
if self.collisionsRemaining > 0: collision it becomes more and more translucent.

94 LXF307 October 2023 www.linuxformat.com


Breakout CODING ACADEMY

The other piece of code that was written for the The configuration
definition used
game is a config parser class. This will not be printed for levels can
here due to size constraints, but a small sample of the be seen here.
code can be seen in the screenshot (over the page). This level plays
Now we have finished defining the objects, let’s background music,
displays a specific
have a look at the main code, which is used to define a
background image,
lot of variables, determine what happens each time the defines some level
main program loop runs, and capture keypresses: descriptions and
import pygame has six rows of
import Constants bricks. Note how
each row can be of
from Ball import Ball
a different length.
...
pygame.init()
fullScreen = False
screenRes = (pygame.display.Info().current_w, pygame.
display.Info().current_h) laserTimeCounter = 0
screenWidth = pygame.display.Info().current_w / 2 frameCount = 0
screenHeight = pygame.display.Info().current_h - 100 gameScore = 0
if fullScreen == True: clock = pygame.time.Clock()
screenWidth, screenHeight = pygame.display.Info(). Next we create two Paddle objects and one Ball
current_w,pygame.display.Info().current_h object. We then create a sprite group to hold instances
frameRate = 60 of Ball objects and one for Paddle objects. Note the
size = (screenWidth, screenHeight) secondary ball group, which is used to hold Ball objects
if fullScreen == True: that are created after the beginning of the game. And
screen = pygame.display.set_mode(size, pygame. note how we don’t put the second Paddle object into
FULLSCREEN) the paddle group as this is only to be used when a ball
else: collides with a brick that has a certain power value. We
screen = pygame.display.set_mode(size) then create groups to store the Brick objects. The
gameTitle = “Paddle Smash” secondaryBrickGroup is used to store bricks that can
window = pygame.display be destroyed – bricks can be indestructible. Finally, we Learn more
window.set_caption(gameTitle) create a group to store any created laser bullets and about
ballRadius = (screenWidth * screenHeight) / 30000 we have some variables to store whether laser bullets decorators in
paddleWidth = screenWidth * screenHeight / 5000 should be created. We then initialise a frameCount Python at this
... variable, which we can use to determine regular time link: https://
levelConfigDir = “levels//” intervals. Finally, we initialise a variable for the realpython.
collisionPoints = 10 gameScore and add a clock to the game. com/primer-
on-python-
font = pygame.font.SysFont(None, int(screenHeight / In the code, we define some variables to store
decorators
20)) information about the configuration that we will
The first thing we do in this sample is import the
necessary libraries, we then initialise the Pygame
library and define some variables for the size of the EXTEND THE GAME
window we need to generate. Note how functionality
has been included to create a full-screen game While designing the data structures and classes within the game,
window. Next we create the window and set the title. care was taken to make it as extensible as possible. As can be seen
Then we define some variables to store things such from Constants.py, there is already the following extra functionality:
as the radius of the Ball objects, width of the Paddle more balls can be added, an additional paddle can be shown on the
objects, and locations of the level config files. Finally, screen, and the ball can obtain fireball power, enabling it to travel
we create a variable to score how many points each through bricks. It is also possible to grow and shrink the paddle(s),
brick collision is worth before defining a font to use for speed up or slow down the ball, and attach laser bullets to the
the high score and countdown line. paddle, allowing it to also destroy the bricks. These power values are
paddle = Paddle(paddleWidth, paddleHeight, 0, defined in the level config and any number can be added at one time.
screenHeight - 100, paddleSpeed) It is clearly documented in the code where the power values are
paddle2 = Paddle(paddleWidth, paddleHeight, actioned, both to initiate them as soon as the brick has been collided
screenWidth - 400, screenHeight - 100, paddleSpeed) with and when to destroy the extra functionality, when the power
ball = Ball(ballRadius, ballRadius, paddle.positionX + countdown has reached zero. Once the initiation and removal code
ballRadius / 2, paddle.positionY - ballRadius, ballSpeed) has been added, all that remains is to add the necessary constants
ballGroup = pygame.sprite.Group() to the Constants.py file.
ballGroup.add(ball) While testing following the implementation of the last power
secondaryBallGroup = pygame.sprite.Group() values, an issue was discovered: if two power values for the same
paddleGroup = pygame.sprite.Group() object are defined, the countdown is cancelled for the first and is
paddleGroup.add(paddle) added for the second power value only. For example, if an extra ball
brickGroup = pygame.sprite.Group() is added, closely followed by fireball power, the fireball power will
secondaryBrickGroup = pygame.sprite.Group() timeout after the countdown period, but the extra ball will not. This is
laserBulletGroup = pygame.sprite.Group() left as an exercise for you to remedy if this functionality is unwanted.
createLaserBullets = False

www.techradar.com/pro/linux October 2023 LXF307 95


CODING ACADEMY Breakout

A small sample of usage of the q and Escape keys to quit the level, then
the level import
define what happens when the left or right arrow keys
parser can be
seen here. are pressed.
carryOn = True
while carryOn:
...
keys_pressed = pygame.key.get_pressed()
if keys_pressed[pygame.K_LEFT]:
if len(paddleGroup) == 1:
paddle.updatePosition(Constants.Left,
screenWidth)
else:
for paddleCounter in range(0,
len(paddleGroup)):
import. We then import information from all config files paddleObject = paddleGroup.sprites()
in the levels directory. This is then used by the menu [paddleCounter]
More can be system, to enable us to select the level we wish to play. if paddleCounter == 0:
learned about The next part of the code sample is the main loop for direction = Constants.Right
Pygame here: each level that is played. We describe this later in the else:
https://www. article, because it flows better if we switch the order. direction = Constants.Left
pygame.org/ Let’s define our menu system that we wish to paddleObject.updatePosition(direction,
news display on the screen: screenWidth)
def setLevel(name, positionInList, filePath, numbers): In this code sample, when the left arrow key is
global levelConfig pressed, we move a single paddle to the left. If there
levelConfig = levelConfigFileDict[filePath] are two paddles in the paddleGroup, we move one
menu = pygame_menu.Menu(‘Welcome’, to the left and the other to the right. Printed here is
screenWidth - 100, screenHeight - 100, the equivalent code for when the right arrow is
theme=pygame_menu.themes.THEME_BLUE) pressed, but this simply reverses the logic.
menu.add.text_input(‘Name: ‘, default=’John Doe’) carryOn = True
menu.add.selector(‘Difficulty: ‘, levelConfigMenuList, while carryOn:
onchange=setLevel) ...
menu.add.button(‘Play’, startLevel) for ballObject in ballGroup.sprites():
menu.add.button(‘Quit’, pygame_menu.events.EXIT) ballObject.updatePosition(screenWidth)
menu.mainloop(screen) if (ballObject.directionY == 1 and ballObject.
pygame.quit() positionY >= paddle.positionY):
In this code sample, we define a function that if ballObject.type == “secondary”:
is called when the menu selector object is used. ballObject.kill()
When the arrow keys are used to select the level, this elif ballObject.type == “primary”:
function is called, which updates a variable with the ballObject.positionX = paddle.positionX +
necessary configuration needed to play the level. Next, ballRadius / 2
we create a menu object, select the text to display, size ballObject.positionY = paddle.positionY -
of the menu and the colour theme to use. On the next ballRadius
lines, we define the menu objects to display and which numLives -= 1
functions to call when the menu objects are interacted print(“Lives:”, numLives)
with. Finally, we call the mainloop on our screen object # Secondary balls should
and call the quit method when the mainloop exits. be removed after the relevant countdown
When the Play option in the menu is selected, the if type(ballObject.
startLevel function is called. This contains a huge countdown) == type(int()):
amount of logic. Firstly, the configuration options are ballObject.clock.tick()
used to provide paths to the background image and ballObject.testClock()
music. These files are then loaded in and initialised as # Detect if any balls collide with the bricks
required. Next, the Row information is loaded from the brickCollidedWith = ballObject.
configuration object and the Brick objects are created. detectCollision(brickGroup)
This contains the number of collisions, power values if brickCollidedWith != None:
and position they need to be drawn. These objects are if ballObject.powerValue != Constants.Fireball:
added to the relevant Brick groups as well. Next, the ballObject.directionY *= -1
code runs within a while loop, while a number of brickCollidedWith.registerCollision()
conditions are met. Should the countdown timer run # Add to the score whenever a collisions
out, lives drop to zero, or all destructible bricks be occurs
destroyed, the loop exits and the game is over. For gameScore += collisionPoints
each iteration of the loop, the screen is updated at 60 # Deal with the power ups / power downs.
frames per second. First, we paint the screen black Depending what the power value is, do different things
and, if a file is available, draw the background image. if brickCollidedWith.powerValue != 0 and
Next we use the event handling functionality to take brickCollidedWith.powerInstigated == False:
action when certain keypresses occur. We catch the # Extra ball

96 LXF307 October 2023 www.linuxformat.com


Breakout CODING ACADEMY

if brickCollidedWith.powerValue ==
Constants.ExtraBall: CREATE A COLLABORATIVE GAME
extraBall = Ball(ballRadius, ballRadius,
paddle.positionX + ballRadius/2, paddle.positionY - If you have had your interest piqued by this two-part series, please
ballRadius, ballSpeed, type=”secondary”, do take the code, copy it and make changes or improvements. We
countdown=powerTime, would be really pleased if improvements were made and pull
powerValue=brickCollidedWith.powerValue) requests sent that can be used to improve the game as it stands
ballGroup.add(extraBall) at time of publication. GitHub contains a wiki with the basics of
secondaryBallGroup.add(extraBall) information about the configuration file format and what each of the
brickCollidedWith.powerInstigated = True power values are used for. Some possible improvements would be
screen.blit(ballObject.image, to enable each object to have multiple power values attributed to it,
(ballObject.positionX, ballObject.positionY)) each with its own countdown timer. Another improvement would be
Within the while loop, we first iterate through each to use the menu system and a high score system to save the top
Ball in the ballGroup and call its updatePosition score each time a game is played. This would allow a leader board
function, which uses the speed, angle and other between friends who play on the same machine.
variables to determine where the ball should move on Thinking of bigger-picture additions, an online leader board would
the screen. Next, we need to determine what happens be an excellent addition for multiple people to compete against each
if a ball moves below the top of the paddle. In this other. Other interesting features to add would be extra power values,
situation, the original ball should be moved back to such as slowing down and speeding up the paddles, and reducing
the position of the paddle and the numLives variable the level countdown time, which adds another level of difficulty.
decremented by one. If the ball is generated by a
power value, it should be destroyed by calling its kill
function. Next we use the testClock function, which There are two pieces of functionality left. The first
determines whether the ball has been on the screen is that of Laser Bullets. If this functionality is enabled
for the correct period of time, before it is destroyed. by a brick, a variable is set to determine that the Laser
It is now important to call the detectCollision Bullets should be created. The bullets are then created
function with an argument that contains the group of and their position updates once every half second.
bricks. Returned by this function is the brick object Laser Bullets are created from the middle of the
that the ball has collided with. Once we know which Paddle objects. After the countdown period is over, the
brick has been collided with, we reverse the direction bullets are destroyed and no more are created. Finally,
of the ball (if the fireball power has not been instigated). the main game’s clock method has the tick function
We then call the registerCollision function, where the called and the carryOn variable is set to False when
brick has its alpha value changed or is destroyed. Next certain conditions are met. When this happens, the
the gameScore is incremented by the relevant points. loop exits and we are returned to the menu system.
The next stanza of code is used to handle the power We trust you’ve enjoyed learning about Pygame,
values assigned to bricks. In this sample, we can see inheritance and other Python features. It can be
what happens when the power value adds an extra ball disheartening to begin programming with dry exercises
to the screen. An extra Ball object is created, set to that cover things like taking user input and performing
start in the middle of the primary paddle, with the if statements to test logic and loops to do things like
type set to secondary, countdown variable set and summing numbers together. But these basic building
powerValue set to Constants.ExtraBall. The new ball blocks of coding are all used in writing this game, with
is then added to the relevant groups. This causes an Pygame abstracting away the really difficult parts, such
extra ball to be added to the screen with a countdown as drawing shapes or images on the screen. It is also
assigned to it. Finally, when a brick has been collided worth thinking about the programmers who wrote
with, we mark a variable as such so that the power these games years ago, when such helper libraries
can only be used once. Finally, the ball is drawn on the were not available, and coding was done in such a
screen, in the updated position with the blit function. controlled way that every single CPU cycle was used
For the rest of the article, follow the code on GitHub. efficiently, due to the lower resource available.
Within the while loop we now have a similar for loop to
iterate over the Paddles. This lets us determine if a ball In this code
sample, the
collides with it. When the ball collides, we reverse the contents of
Y direction, so it travels back up the screen again. We Constants.py can
also use the familiar testClock function to determine be seen, which
if secondary paddles should remain on the screen or provides a way to
easily reference
be destroyed. Finally, for each Paddle, we update its
constants with
position on the screen with the blit function. familiar names.
Next we iterate over each Brick in the group of
bricks and draw them on the screen. Then we generate
a font object and a string of text, which we display on
screen. This text is updated each time the loop runs
and is kept updated. The string contains the current
score, countdown time and number of remaining lives.

SMASH THROUGH OUR SUBS… Subscribe now at http://bit.ly/LinuxFormat

www.techradar.com/pro/linux October 2023 LXF307 97


NEXT MONTH
The #1 open source mag

LXF30s8ale Future Publishing Limited,

will be on
Quay House, The Ambury, Bath, BA1 1UA
Email contact@linuxformat.com

Tuesday 17th
EDITORIAL
Editor-in-chief Neil Mohr

October
Art editor Fraser McDermott
Production editor Katharine Davies
Group editor-in-chief Graham Barlow

2023 Group art director Warren Brown


Editorial contributors Mike Bedford,
Denise Bertacchi, Jonni Bidwell, David Bolton,
Neil Bothwick, Stuart Burns, Shane Downing,
Nate Drake, Darien Graham-Smith, Tam Hanna,
Matt Holder, Mike Jennings, Jon Masters,
Nick Peers, Les Pounder, Michael Reed,
Mayank Sharma, Shashank Sharma,
Chris Szewczyk, Mike Williams, Joshua Wolens
Cover illustration Magictorch.com
Raspberry Pi is a trademark of the Raspberry Pi Foundation.
Tux credit: Larry Ewing (lewing@isc.tamu.edu).
Content production Adequate Media Limited
ADVERTISING
Commercial sales director Clare Dove
clare.dove@futurenet.com
Advertising director Lara Jaggon
lara.jaggon@futurenet.com
Account director Andrew Tilbury
andrew.tilbury@futurenet.com
INTERNATIONAL LICENSING
Head of print licensing Rachel Shaw
Linux Format is available for licensing and syndication.
To find our more contact us at licensing@futurenet.com

CREDIT: Magictorch
or view our content at www.futurecontenthub.com
NEW SUBSCRIPTIONS & BACK ISSUES
Web www.magazinesdirect.com
UK 0330 333 1113 World +44 (0) 330 333 1113
EXISTING SUBSCRIPTIONS
Web www.mymagazine.co.uk
UK 0330 333 4333 World +44 (0) 330 333 4333
Subscription delays: Disruption remains within UK
and international delivery networks. Please allow up

OPEN SOURCE
to seven days before contacting us about a late
delivery to help@magazinesdirect.com
CIRCULATION
Newstrade & retail category director Ben Oakden
PRODUCTION AND DISTRIBUTION
Group head of production Mark Constance
Production manager Nola Cokely
Senior ad production manager Jo Crosby
Digital editions manager Jason Hudson

STREAMING
THE MANAGEMENT
Managing director technology group Paul Newman
Global head of design Rodney Dive
Commercial finance director Tania Brunning
Printed by Wyndeham Peterborough, Storey’s Bar
Road, Peterborough, Cambridgeshire, PE1 5YS
Distributed by Marketforce, 5 Churchill Place,
Canary Wharf, London, E14 5HU
www.marketforce.co.uk For enquiries email:
mfcommunications@futurenet.com
Linux® is the registered trademark of Linus Torvalds in the US and other countries.

Stream all your media around your home and


GNU/Linux is abbreviated to Linux throughout for brevity. Where applicable,
code printed in this magazine is licensed under the GNU GPL v2 or later. See
www.gnu.org/copyleft/gpl.html. All copyrights and trademarks are recognised
and respected.

beyond – we look at the innovative new options! Disclaimer All contents © 2023 Future Publishing Limited or published under
licence. All rights reserved. No part of this magazine may be used, stored,
transmitted or reproduced in any way without the prior written permission of the
publisher. Future Publishing Limited (company number 2008885) is registered in
England and Wales. Registered office: Quay House, The Ambury, Bath BA1 1UA. All
information contained in this publication is for information only and is, as far as we

WordPress is 20!
are aware, correct at the time of going to press. Future Publishing Limited cannot
accept any responsibility for errors or inaccuracies in such information. You are
advised to contact manufacturers and retailers directly with regard to the price of
products/services referred to in this publication. Apps and websites mentioned in
this publication are not under our control. We are not responsible for their contents
or any other changes or updates to them. This magazine is fully independent and

As WordPress celebrates its latest milestone, we set up a home


not affiliated in any way with the companies mentioned herein.
If you submit material to us, you warrant that you own the material and/or have
the necessary rights/permissions to supply the material and you automatically

web server for sharing tasks, messages and more with it.
grant Future Publishing Limited and its licensees a licence to publish your
submission in whole or in part in any/all issues and/or editions of publications, in any
format published worldwide and on associated websites, social media channels
and associated products. Any material you submit is sent at your own risk and,

COBOL can almost retire!


although every care is taken, neither Future nor its employees, agents,
subcontractors or licensees shall be liable for loss or damage. We assume all
unsolicited material is for publication unless otherwise stated, and reserve the
right to edit, amend and adapt all submissions. All contents in this magazine are
used at your own risk. We accept no liability for any loss of data or damage to your
systems, peripherals or software through the use of any guide.

Now pushing 64, we look at where COBOL came from and what We are committed to only using magazine paper derived from

keeps it running on a host of mainframes around the world.


responsibly managed, certified forestry and chlorine-free
manufacture. The paper in this magazine was sourced and
produced from sustainable managed forests, conforming to
strict environmental and socioeconomic standards.

Happy Domesday! Future is an award-winning international media group and

You can’t say we’re all doom and gloom around here as we revive
leading digital business. We reach more than 57 million
international consumers a month and create world-class
content and advertising solutions for passionate

the BBC Domesday Project and find out how to run it again. consumers online, on tablet & smartphone and in print.

Get fediversed!
Make Big Social quake in fear as you fire up your own social
sharing server and get connected to the growing fediverse.
Content of future issues subject to change. We might have been taken out by Big Social. Sounds fun, actually…

98 LXF307 October 2023 www.linuxformat.com


9000 9021

You might also like