Es wird nicht funktionieren, weil:
rc.local wird ausgeführt, bevor der X11-Server gestartet wird.
rc.local weiß nicht, wo sich der X11-Server befindet. Mit anderen Worten, es kennt nicht den richtigen Wert für $ DISPLAY.
Denken Sie immer daran, dass es mehrere X11-Server geben kann - Ubuntu unterstützt die "schnelle Benutzerumschaltung", so dass Sie möglicherweise eine Xorg-Instanz und eine zweite für den Anmeldebildschirm haben.
rc.local hat keinen Zugriff auf einen der aktuell laufenden X11-Server.
Denken Sie darüber nach: Wenn Sie den Zugriff auf root mithilfe von root angeben müssen
xhost
, bedeutet dies, dass root noch keinen Zugriff hat. Und rc.local läuft als root.
Alle drei Punkte gelten auch für Cronjobs, für udev-Regeln und für die meisten anderen Dinge.