1. Overview
systemctl is a powerful and essential tool for managing services in Linux distributions, allowing users to start, stop, enable, disable, and query the status of system services. However, there may be instances when certain services may be masked, preventing standard management commands from affecting them.
In this tutorial, we’ll explore the process of unmasking systemctl in Linux.
2. What Is systemctl unmask?
systemctl unmask is a command used to remove the mask from a systemd unit, usually a service. It reverses the masking of a service, making it operational and accessible for system administrators.
3. Why Mask and Unmask Service?
Before diving into the unmasking process, it’s crucial to understand why a service might be masked.
In Linux, administrators may mask services for security and stability measures. One technique to prevent unintentional or accidental activation or manipulation of important system services is to use masking services.
On the other hand, we need to unmask a service when we require activation or to regain control over a particular service. When a service needs to be operational or configured according to specific requirements, unmasking becomes necessary. This allows administrators to approach this action with caution, consider the potential impact on system security and stability, and have the flexibility to manage and adjust services as needed.
4. Unmasking systemctl
Now that we have an idea why masking and unmasking a systemd service is necessary, it’s time to proceed with the unmasking process. Let’s see how we can do it and regain control.
4.1. Identifying the Masked Service and Its File Location
Before unmasking a service, we must identify the masked service. Let’s utilize systemctl along with the list-unit-files option to showcase a list of system unit files, then apply grep to filter out the masked service:
$ systemctl list-unit-files | grep masked
cgroupfs-mount.service masked disabled
cryptdisks-early.service masked disabled
rc.service masked disabled
saned.service masked disabled
sudo.service masked enabled
x11-common.service masked enabled
...
The above command output shows the currently masked services.
Let’s select x11-common.service, which we’ll be unmasking throughout this tutorial. First, let’s view the status of x11-common.service using systemctl:
$ sudo systemctl status x11-common.service
○ x11-common.service
Loaded: masked (Reason: Unit x11-common.service is masked.)
Active: inactive (dead)
The command output indicates that the x11-common.service is inactive and dead. The status also shows that the service is loaded but masked, meaning it’s intentionally disabled to prevent accidental activation or modification.
Similarly, to unmask the service, we need to find the path where the masked service file is located. We can search for the service file using the find command:
$ sudo find /etc /usr/lib -name "x11-common.service*"
/usr/lib/systemd/system/x11-common.service
The above command searches for a file with the name x11-common.service in the /etc and /usr/lib directories and displays the location of the service file.
4.2. Unmasking the Service With rm
Once we identify the correct path, we’ll proceed with removing the symbolic link using the sudo rm command:
$ sudo rm /usr/lib/systemd/system/x11-common.service
We must always exercise caution when removing files with sudo rm, as it permanently deletes them. After removing the symbolic link, let’s reload the systemd daemon for the changes to take effect:
$ sudo systemctl daemon-reload
4.3. Verifying Unmasking
Let’s verify if the service is unmasked using systemctl:
$ sudo systemctl status x11-common.service
○ x11-common.service - LSB: set up the X server and ICE socket directories
Loaded: loaded (/etc/init.d/x11-common; generated)
Active: inactive (dead)
Docs: man:systemd-sysv-generator(8)
The above command result shows that the service is inactive. The service is loaded from the /etc/init.d/x11-common file, created by the systemd-sysv-generator, which suggests that x11-common.service is no longer masked. Once we unmask the service, we can manage (enable, disable, start, stop, status) the service using systemctl.
5. Conclusion
In this article, we explored the method to unmask systemctl services in Linux.
After identifying the masked service with systemctl and finding its file location, we need to remove the symbolic link using sudo rm, and then reload the daemon to unmask the service.
Unmasking systemd service units grants us control over previously masked services, but caution is essential to prevent unintended consequences when manipulating system services.