Skip to content

Instantly share code, notes, and snippets.

@angeloped
Last active February 2, 2024 09:55
Show Gist options
  • Star 10 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save angeloped/3febaaf71ac083bc2cd5d99d775921d0 to your computer and use it in GitHub Desktop.
Save angeloped/3febaaf71ac083bc2cd5d99d775921d0 to your computer and use it in GitHub Desktop.
Python code to get motherboard serial number. For Linux, MacOS, and Windows.
# wmic bios get serialnumber#Windows
# hal-get-property --udi /org/freedesktop/Hal/devices/computer --key system.hardware.uuid#Linux
# ioreg -l | grep IOPlatformSerialNumber#Mac OS X
import os, sys
def getMachine_addr():
os_type = sys.platform.lower()
if "win" in os_type:
command = "wmic bios get serialnumber"
elif "linux" in os_type:
command = "hal-get-property --udi /org/freedesktop/Hal/devices/computer --key system.hardware.uuid"
elif "darwin" in os_type:
command = "ioreg -l | grep IOPlatformSerialNumber"
return os.popen(command).read().replace("\n","").replace(" ","").replace(" ","")
#output machine serial code: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX
print(getMachine_addr())
@shuq007
Copy link

shuq007 commented Feb 16, 2021

We can do it the other way around by using dmidecode -s baseboard-serial-number for newer Linux variants:

import os
import sys


def getMachine_addr():
    """ Find OS and run appropriate read mobo serial num command"""
    os_type = sys.platform.lower()

    if "darwin" in os_type:
        command = "ioreg -l | grep IOPlatformSerialNumber"
    elif "win" in os_type:
        command = "wmic bios get serialnumber"
    elif "linux" in os_type:
        command = "dmidecode -s baseboard-serial-number"
    return os.popen(command).read().replace("\n", "").replace("  ", "").replace(" ", "")


print("Your motherboard Serial No.", getMachine_addr())

@ujlain
Copy link

ujlain commented Feb 27, 2021

Getting following errors (OS Linux Mint 19.3) :-
/sys/firmware/dmi/tables/smbios_entry_point: Permission denied
/dev/mem: Permission denied

However when script is run as sudo , it works as desired and spits out the mb serial number.
Wondering if there is any other method that facilitates above without sudo ?

@mlacunza
Copy link

For the original code Im getting this error:
/bin/sh: 1: hal-get-property: not found

For the fix from @shuq007 its running perfect but with sudo, any idea how to run it without sudo?
PC: Ubuntu 20.04

@finkformatics
Copy link

I'd recommend the str startswith-method instead of using in as others mentioned already that in isn't safe.

@ELIJAHKUNGU
Copy link

mport os
import sys

def getMachine_addr():
""" Find OS and run appropriate read mobo serial num command"""
os_type = sys.platform.lower()

if "darwin" in os_type:
    command = "ioreg -l | grep IOPlatformSerialNumber"
elif "win" in os_type:
    command = "wmic bios get serialnumber"
elif "linux" in os_type:
    command = "dmidecode -s baseboard-serial-number"
return os.popen(command).read().replace("\n", "").replace("  ", "").replace(" ", "")

print("Your motherboard Serial No.", getMachine_addr())

The best solution

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment