There is an interesting open-source project on GitHub called vlmcsd (https://github.com/Wind4/vlmcsd) to emulate Microsoft’s KMS activation server. You can use it to deploy your own KMS server on platforms other than Windows Server (thus, you can save on a Windows Server license if you don’t use it). You can install such a KMS server on Linux, Android, FreeBSD, macOS, etc. In this article, we’ll show you how to install vlmcsd-based KMS on a Linux host and use it to activate computers running desktop Windows editions, Windows Server, and Microsoft Office on your local network.
Before you start, we recommend that you familiarize yourself with Microsoft KMS Volume Activation technology. Almost all the necessary information can be found in the Microsoft KMS Volume Activation FAQ.
In this example, we are using Red Hat Enterprise Linux 8 (RHEL) to deploy the KMS host, but you can use any other OSs, such as Ubuntu, Debian, CentOS, Rocky Linux. or even your NAS device (there are some examples of successful installation to a Synology NAS server).
Connect to your Linux server and use the yum (dnf) package manager to install the git and gcc packages:
# dnf update
# dnf install git gcc
Then clone and install the vlmcsd package:
# git clone https://github.com/Wind4/vlmcsd
# cd vlmcsd
Change to the bin directory:
# cd bin
Run the KMS server:
You will see the following message:
Connecting to 127.0.0.1:1688 ... successful Sending activation request (KMS V6) 1 of 1 -> 55041-00206-559-475403-03-1076-6002.0000-1482020 (3A1C049600B60076)
It means that you have successfully compiled and run the KMS server on Linux.
By default, vlmcsd listens on a default KMS port TCP/1688. So, you have to open the port in your Linux firewall to allow clients to connect to it. For firewalld, run the commands below:
# firewall-cmd --zone=public --permanent --add-port=1688/tcp
# firewall-cmd –reload
Make sure that port 1688 is open:
# firewall-cmd --list-port
# netstat -ntlp | grep LISTEN
To run vlmcsd automatically, you can create your own daemon and manage it using systemd.
# cp vlmcs /usr/bin
# touch /etc/systemd/system/kms-script.service
# chmod 664 /etc/systemd/system/kms-script.service
# nano /etc/systemd/system/kms-script.service
Add the following service description to the file:
[Unit] Description=MSFT KMS Server Emulator After=network.target After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/bin/vlmcsd RemainAfterExit=yes LimitNOFILE=65536 [Install] WantedBy=multi-user.target
Then run the KMS service and add it to startup:
# systemctl daemon-reload
# systemctl start kms-script.service
# systemctl status kms-script.service
# systemctl enable kms-script.service
You can set advanced KMS server options through the vlmcsd.ini (there is a sample file in ../vlmcsd/etc/). There you can also set a path to the KMS server log file (vlmcsd.log). You can set file paths in the vlmcsd startup options using the following options:
sudo docker pull mikolatero/vlmcsd
sudo docker run -d -p 1688:1688 --restart=always --name kms_server mikolatero/vlmcsd /vlmcsd -D -d -t 3 -e -v -R172800 -A10080
If you are using Microsoft DNS, you can create a _VLMCS record that will allow Windows clients to automatically find a KMS server in the domain. To create a DNS SRV record, use the following PowerShell command:
Add-DnsServerResourceRecord -Srv -Name "_VLMCS._tcp" -ZoneName "woshub.com" -DomainName "192.168.14.147" -Priority 0 -Weight 0 -Port 1688
192.168.14.147 is an IP address of your Linux host KMS service is running on.
Then all Windows (and Office) hosts in your domain will be automatically activated on your KMS server if they have a public GVLK installed on them. A complete list of GVLK (Generic Volume License Keys) to activate all available Windows versions is published on the Microsoft website: https://docs.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys.
For example, find GVLK to activate Windows Server 2022 Standard (VDYBN-27WPP-V4HQT-9VMD4-VMK7H) and Windows 10 Pro (W269N-WFGWX-YVC9B-4J6C9-T83GX) on this page.
To activate Windows manually, set the GVLK for your Windows version, the IP address of your KMS activation host, and run the activation command. The following commands are used (for example, for Windows Server 2022 Standard):
slmgr.vbs -ipk VDYBN-27WPP-V4HQT-9VMD4-VMK7H
slmgr.vbs -skms 192.168.14.147
After you run the last command, you will see the message:
Product activated successfully. This means that your Windows copy has been successfully activated.
You can check the Windows activation status using the command:
Error: 0xC004F069 On a computer running Microsoft Windows non-core edition, run 'slui.exe 0x2a 0xC004F069' to display the error text.
The reason is that I have an evaluation version of Windows Server 2022 installed. First, you need to convert it to a Standard version according to this article:
dism /online /set-edition:serverstandard /productkey:VDYBN-27WPP-V4HQT-9VMD4-VMK7H /accepteula
Then I can activate my Windows instance on the KMS host.
In the same way, you can activate volume versions of Microsoft Office 2019/2016/2013 on your KMS host. The following commands are used:
cd C:\Program Files\Microsoft Office\Office16
cscript ospp.vbs /sethst: 192.168.14.147
cscript ospp.vbs /act
cscript ospp.vbs /dstatusall
So we have shown how to deploy a KMS server on Linux and activate all Windows versions including the latest Windows Server 2022 and Windows 11.