@@ -65,6 +65,41 @@ func (d *Daemon) scalePlymouth(scale uint32) error {
6565 return nil
6666}
6767
68+ func (d * Daemon ) SetPlymouthTheme (themeName string ) * dbus.Error {
69+ return dbusutil .ToError (d .setPlymouthTheme (themeName ))
70+ }
71+
72+ func (d * Daemon ) setPlymouthTheme (themeName string ) error {
73+ plymouthLocker .Lock ()
74+ defer plymouthLocker .Unlock ()
75+ defer logger .Debug ("end ScalePlymouth" , themeName )
76+ themelistout , err := exec .Command ("plymouth-set-default-theme" , "--list" ).CombinedOutput ()
77+ if err != nil {
78+ return fmt .Errorf ("seems cannot find the plymouth-set-default-theme: %v" , err )
79+ }
80+ themelist := string (themelistout )
81+ if ! strings .Contains (themelist , themeName ) {
82+ return fmt .Errorf ("The themeName %s does not exist in plymouth themelist" , themeName )
83+ }
84+
85+ out , err := exec .Command ("plymouth-set-default-theme" , themeName ).CombinedOutput ()
86+ if err != nil {
87+ return fmt .Errorf ("failed to set plymouth theme: %s, err: %v" , string (out ), err )
88+ }
89+
90+ kernel , err := exec .Command ("uname" , "-r" ).CombinedOutput ()
91+ if err != nil {
92+ return fmt .Errorf ("failed to get kernel, err: %v" , err )
93+ }
94+ out , err = exec .Command ("update-initramfs" ,
95+ "-u" , "-k" , string (bytes .TrimSpace (kernel ))).CombinedOutput ()
96+ if err != nil {
97+ return fmt .Errorf ("failed to update initramfs: %s, err: %v" , string (out ), err )
98+ }
99+
100+ return nil
101+ }
102+
68103func getEditionName () (string , error ) {
69104 conf , err := parseInfoFile ("/etc/os-version" , "=" )
70105 if err != nil {
0 commit comments