Here's an event-based dbus listener that looks for avahi hostname changes, and tries to remove the -2
suffix. It runs on startup as a systemd service (the gist includes an example service unitfile). I'm running it on a Debian server, although any distro that has dbus should be fine.
The benefit with this approach is that the script doesn't rely on polling, so when the hostname changes, it will quickly be changed back.
import dbus, avahi
from dbus.mainloop.glib import DBusGMainLoop
from gi.repository import GLib
import time
class Runner():
def __init__(self, avahi_server):
self.avahi_server = avahi_server
def on_state_change(self, state, error):
if state == avahi.SERVER_COLLISION:
print(f"[state: collision] collided, waiting 5s...")
time.sleep(5)
elif state == avahi.SERVER_RUNNING:
hostname = self.avahi_server.GetHostName()
print(f"[state: running] hostname changed: {hostname}")
if hostname.endswith("-2"):
hostname = str(hostname)[0:-2]
print(f"removing `-2` suffix: {hostname}")
self.avahi_server.SetHostName(hostname)
def main():
DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
object = bus.get_object("org.freedesktop.Avahi","/")
avahi_server = dbus.Interface(object, 'org.freedesktop.Avahi.Server')
runner = Runner(avahi_server)
avahi_server.connect_to_signal('StateChanged', runner.on_state_change)
print("Starting main loop")
loop = GLib.MainLoop()
loop.run()
if __name__ == '__main__':
main()
https://gist.github.com/dymk/d06425d932c96916f27eed9bfc5bb7cc