1. Overview
A QR (Quick Response) code is a grid of dark and light dots that can hold up to 7,089 characters. These codes are widely used for URL sharing, personal identification, passes, ticketing, geolocation, contact information, WiFi network configuration, and other purposes that require access to data with a simple scan.
In this tutorial, we’ll see how to read a QR code from a webcam or a file using some Linux command-line and graphical open-source tools. As an example, we’ll use this downloadable QR code, which contains a link to the Baeldung website:
We’ll use Linux Mint 21 to install and test the following tools. However, their availability on other distributions may vary.
2. Command-Line Tools
Here we’ll see how to use the Linux terminal to recognize and decode QR codes from images or video streams.
2.1. zbarimg & zbarcam
First, we need to install ZBar Bar Code Reader, a software suite that includes the two utilities we’re interested in:
$ sudo apt install zbar-tools
zbarimg takes an image file as input and outputs the decoded data to standard output or to a file:
$ zbarimg Baeldung-website-QR-code.png
QR-Code:https://www.baeldung.com/
scanned 1 barcode symbols from 1 images in 0,05 seconds
If we’re interested in clean output, i.e., without any extra information beyond the decoded string, we can use the -q and –raw options:
$ zbarimg -q --raw Baeldung-website-QR-code.png
https://www.baeldung.com/
zbarcam captures frames from a video device and scans them for QR codes, displaying the results on the screen or sending them to another program. While framing a QR code, let’s observe the terminal:
The Examples section of the man page shows how to pipe the resulting data through a script. It’s also possible to disable the preview window with the –nodisplay option, but this has an unfixed bug at the moment.
2.2. QR Scanner CLI
QR Scanner CLI is another solution for decoding QR codes stored in image files.
For the installation, we need to use npm, the Node Package Manager, which is the default tool to manage Node.js packages. The -g flag specifies that the software should be installed globally, making its command-line tool available to all users:
$ sudo npm i -g qr-scanner-cli
After that, it’s easy to use:
$ qrscanner ./Baeldung-website-QR-code.png
╔═══════════════════════════════╗
║ ║
║ https://www.baeldung.com/ ║
║ ║
╚═══════════════════════════════╝
To get clean output, we can use the –clear option:
$ qrscanner --clear ./Baeldung-website-QR-code.png
https://www.baeldung.com/
We can also take a look at the –clipboard option to copy the decoded string to the clipboard. This is interesting because, in Linux, we can automate the use of the clipboard using various command-line tools and scripting languages.
3. GUI Tools
Now let’s look at some more user-friendly utilities.
3.1. CoBang
CoBang allows us to decode QR codes from both local and remote pictures and webcams. Its documentation includes installation instructions for some popular distributions, as well as Flatpak support in all other cases:
$ sudo add-apt-repository ppa:ng-hong-quan/ppa
$ sudo apt update
$ sudo apt install cobang
Using the webcam is pretty intuitive:
Using remote images may be less obvious. We actually have to drag the image from the browser, or from the local file system with remote mounting, into the CoBang window:
The Screenshots section of the documentation shows other interesting use cases, such as CoBang’s integration with Network Manager for the use of WiFi configuration QR codes.
3.2. QR Code Reader (Firefox and Chrome)
QR Code Reader is an extension for Firefox and Chrome. Internally it uses the ZBar library seen earlier and allows scanning QR codes from webcams and local images:
As noted in the FAQ, this extension only works locally and doesn’t perform any server-side interaction.
3.3. QtQR
QtQR is first and foremost a QR code generator with a clear and clean interface. Let’s install it:
$ sudo apt install qtqr
The options we’re interested in are Decode from File and Decode from Webcam:
Unlike any other tool we’ve seen so far, this one allows us not only to decode QR codes, but also to edit them.
4. Conclusion
In this article, we’ve seen some command-line and graphical tools for decoding QR codes on Linux:
- zbarimg & zbarcam
- QR Scanner CLI
- CoBang
- QR Code Reader extension for Firefox and Chrome
- QtQR
The choice of tool depends on our preferences. Command-line tools are especially good for automated workflows.