Pagina 1 di 1

[WORKAROUND]Timidity e RTC non accessibile

Inviato: sab 15 mar 2008, 18:46
da 414N
Salve a tutti.
Da qualche giorno a questa parte, durante lo spegnimento del pc, è comparso il messaggio: "Cannot set hardware clock to system time (localtime)".
Indagando, ho scoperto tramite il comando

Codice: Seleziona tutto

hwclock --debug --show
che il device /dev/rtc è occupato.
Una rapida occhiata ai processi che lo usano non ha restituito nulla.
In un primo momento ho pensato si trattasse di qualcosa inerente al kernel (il modulo RTC per esempio), ma non avendolo ricompilato o aggiornato di recente, lo escluderei (anche perchè fino a qualche giorno fa non avevo questo errore durante lo spegnimento).
Cercando tramite Google una risposta mi sono imbattuto in un bugzilla di Ubuntu nel quale un utente segnala l'interferenza di timidity++ (che ho installato da sorgenti un mesetto fa) con il RTC di sistema. Chiudendo timidity risulta di nuovo possibile accedere all'hardware clock.
Ho già in mente una soluzione temporanea al problema, ma vorrei sapere se qualcun altro è nella mia stessa situazione o ci è passato.

Re: Timidity e RTC non accessibile

Inviato: sab 15 mar 2008, 20:21
da 414N
Se a qualcuno può interessare ho anche preparato un file rc.timidity utile per lanciare/fermare/rilanciare timidity senza doverlo fare manualmente.
Non è il massimo della finezza ma sembra funzionare:

Codice: Seleziona tutto

#!/bin/bash

# Variabili globali

TIMIDITYPID=""
TIMIDITYPATH="/usr/local/bin/timidity"

# Funzione che ricava il PID di timidity dall'output di ps

getpid () {

        TIMIDITYPID=`ps aux | grep "$TIMIDITYPATH" | grep -v grep | awk '{ print $2}'`
}

# Funzione che lancia Timidity (se non è già in esecuzione)

start () {

        if [ "$1" ]
        then
                echo "Timidity is already running (PID=$1)"
                exit 1
        else
                if [ -x "$TIMIDITYPATH" ]
                then

                        echo -n "Starting Timidity..."
                        "$TIMIDITYPATH" -iAD 1>/dev/null &
                        echo "done"
                fi
        fi
}

# Funzione che ferma Timidity (se è in esecuzione)

stop () {

        if [ "$1" ]
        then

                echo -n "Stopping Timidity..."
                kill -9 "$1"
                echo "done"
        else
                echo "Timidity is not running"
                exit 1
        fi

}

# Funzione che rilancia Timidity (sia nel caso che sia
# in esecuzione, sia che non lo sia)

restart () {


        echo "Restarting Timidity..."
        getpid
        if [ "$TIMIDITYPID" ]
        then
                stop "$TIMIDITYPID"
                sleep 1
        fi
        start ""
        echo "Timidity restarted"


}

# Ricavo innanzitutto il PID di Timidity se è in esecuzione

getpid

# Decido il da farsi

case "$1" in
start)
        start "$TIMIDITYPID"
;;

stop)
        stop "$TIMIDITYPID"
;;
restart)
        restart "$TIMIDITYPID"
;;

*)
        echo "Usage: `basename "$0"` start|restart|stop"
        exit 1
;;
esac
exit 0
Andrebbe piazzato in /etc/rc.d insieme ai suoi compagni di merende e reso eseguibile (chmod +x rc.timidity da root).
Per lanciarlo all'avvio, aggiungete:

Codice: Seleziona tutto

# Avvio di timidity

if [ -x /etc/rc.d/rc.timidity ]
then
        /etc/rc.d/rc.timidity start
fi
in rc.local.

Re: Timidity e RTC non accessibile

Inviato: mer 19 mar 2008, 16:49
da 414N
Temporaneamente ho risolto mettendo in /etc/rc.local_shutdown

Codice: Seleziona tutto

#!/bin/bash

# Uccide timidity

if [ -x /etc/rc.d/rc.timidity ]
then
        /etc/rc.d/rc.timidity stop
fi
e spostando l'esecuzione di /etc/rc.d/rc.local_shutdown all'interno di rc.6 prima del salvataggio dell'ora attuale sul hardware clock.
La soluzione però mi sembra poco elegante e potrebbe portare ad avere altri problemi nel caso di altri comandi presenti in rc.local_shutdown.
Qualcuno ha un consiglio?