Irexec - restart po wstrzymaniu systemu.

Grafika, film, dźwięk.
Awatar użytkownika
yp2
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 139
Rejestracja: 31 sty 2007, 19:17
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

Irexec - restart po wstrzymaniu systemu.

Post autor: yp2 »

Witam.

Od dłuższego czasu walczę z restartem irexec'a (pakiet LIRC) po wstrzymaniu systemu. Już myślałem, że udało mi się rozwiązać to zadanie - ale... natknąłem się na dziwny problem.
Irexec po restarcie nie chce wykonywać skryptów bash'a :). Polecenia w rodzaju mpc wykonuje normalnie.
Co zrobiłem (dla naświetlenia sytuacji)
1. irexec'a wywołuje następująco:

Kod: Zaznacz cały

irexec -d /home/daniel/.lircrc
2. Do restartu używam następującego skryptu irexec_start:

Kod: Zaznacz cały

#!/bin/bash
pid=`ps --no-heading -C irexec | cut -d "?" -f1`;
if [ -n "$pid" ]; then
sudo irexec_stop $pid &
irexec -d /home/$USER/.lircrc &
else
irexec -d /home/$USER/.lircrc &
fi
exit 0
3. Skrypt irexec_stop użyty w powyższym skrypcie dodany jest do /etc/sudoers aby wykonywany był bez podawania hasło użytkownika. Kod skryptu:

Kod: Zaznacz cały

#!/bin/bash
kill $1
exit 0
4. Do restartu całego podsystemu LIRC po uśpieniu używam tego skryptu (skrypt jest umieszczony w /usr/lib/pm-utils/sleep.d/ jako 00a_irexec_resume)

Kod: Zaznacz cały

#!/bin/bash

. "${PM_FUNCTIONS}"

PROCESS=irexec
TMP_FILE=/tmp/irexec_name
USER_UID=`ps -C $PROCESS -o uid=`
USER_NAME=`getent passwd $USER_UID | awk -F: '{print $1}'`

case $1 in
        hibernate|suspend)
        # get name of last user name of irexec
        echo $USER_NAME > $TMP_FILE
        # unload modules
        service lirc stop
        modunload lirc_ati lirc_dev
        ;;
        thaw|resume)
        modreload lirc_ati lirc_dev
        UN=`cat $TMP_FILE`
        service lirc start 
        # TU COŚ NIE JEST TAK
        sudo -u $UN -s /usr/local/bin/irexec_start
        #su --shell=/bin/bash --command='/bin/bash /usr/local/bin/irexec_start' - $UN 
        ;;
        *) exit $NA
        ;;
esac
Wyjaśnienie do skryptu.
Muszę niestety wyładowywać i załadowywać moduły od LIRC (lirc_atiusb i lirc_dev) gdyż po wstrzymaniu nie pomaga sam restart usługi LIRC. Później następuje restart usługi LIRC i próba restartu irexec'a i w tym momencie dzieje się coś dziwnego.
Irexec jest restartowany tak jak chce czyli z uruchamiany przez użytkownika, który aktualnie wstrzymuje system i połowicznie działa sterowanie. Połowicznie tzn irexec nie uruchamia skryptów bash'a.

Podaje lircrc

Kod: Zaznacz cały

begin
prog = irexec
button = VCR
config = smplayer.sh 
end

begin
prog = irexec
button = DVD
repeat = 0
config = eject /scd0 & xbmc.sh
end

begin
prog = irexec
button = TV
config = xbmc.sh 
end

begin
prog = irexec
button = PLAY
config = mpc toggle >> /dev/null
end

begin
prog = irexec
button = NEXT
config = mpc next
end
begin
prog = irexec
button = BACK
config = mpc prev
end
begin
prog = irexec
button = PAUSE
config = mpc toggle
end
begin
prog = irexec
button = STOP
config = mpc stop
end
begin
prog = irexec
button = FORWARD
config = mpc seek +5%
end
begin
prog = irexec
button = REWIND
config = mpc seek -5%
end
#begin
#prog = irexec
#button = VOL+
#config = amixer set Master,0 5%+
#repeat = 1
#end
#begin
#prog = irexec
#button = VOL-
#config = amixer set Master,0 5%-
#repeat = 1
#end
begin 
prog = irexec
button = MUTE
config = amixer set Master,0 toggle
end
begin
prog = irexec
button = VOL+
config = mpc volume +5
repeat = 1
end
begin
prog = irexec
button = VOL-
config = mpc volume -5
repeat = 1
end

begin
prog = irexec
button = POWER
config = sudo /sbin/shutdown -h now
end

begin
prog = irexec
button = MUSIC
repeat = 0
config = /home/daniel/.bin/mpd_sonata.sh
end
Skrypt xbmc.sh (w /usr/local/bin)

Kod: Zaznacz cały

#!/bin/bash

pid=`ps --no-heading -C xbmc.bin | cut -d "?" -f1`;
if [ -n "$pid" ]; then
echo "XBMC already Running"
else
metacity --replace &
killall irexec
irexec -d /home/$USER/.lircrc_dvd &
sleep 2
xbmc
sleep 1
killall irexec
irexec -d /home/$USER/.lircrc &
compiz --replace &
#echo "none"
fi
exit 0
Skrypt smplayer.sh (w /usr/local/bin/)

Kod: Zaznacz cały

#!/bin/bash

killall irexec
irexec -d /home/$USER/.lircrc_smplayer 
#pulseaudio -k
smplayer "$1"
#pulseaudio -D
killall irexec
irexec -d /home/$USER/.lircrc &
Ciekawe są pierwsze cztery przyciski (lircrc). Po restarcie przez pm-suspend: 1 - nie dział, 2 - dział połowicznie (wysuwa i chowa tackę napędu ale nie uruchamia skryptu), 3 - nie dział, 4 - dział doskonale (tak samo jak reszta komend mpc i alsamixer).
Aby irexec znów zaczął uruchamiać także skrypty należy ponownie wywołać irexec_start - czyli zabicie i uruchomienie ponowne irexec - z konsoli bądź z aktywatora, oczywiście jak już system wstanie ze wstrzymania i przejdzie do środowiska graficznego. Próbuje to właśnie osiągnąć automatycznie.

Mam tylko zastrzeżenia do tych dwu linii (bo wszystko inne działa) - skrypt 00a_irexec_resume (restart LIRC z pm-suspend)

Kod: Zaznacz cały

sudo -u $UN -s /usr/local/bin/irexec_start
        #su --shell=/bin/bash --command='/bin/bash /usr/local/bin/irexec_start' - $UN
Czy jedna albo druga robi to co chce czyli wywołanie skryptu irexec_start przez danego użytkownika ($UN). W każdym bądź razie irexec startuje tak jak należy (uruchomiony przez właściwego użytkownika) ale dlaczego nie chce wykonywać skryptów :tes: . Próbowałem nawet kopiować skrypty do /usr/bin/ co nie przyniosło skutku.
Co robię źle.

Pozdrawiam
Awatar użytkownika
yp2
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 139
Rejestracja: 31 sty 2007, 19:17
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

Odp: Irexec - restart po wstrzymaniu systemu.

Post autor: yp2 »

Up :)
Awatar użytkownika
yp2
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 139
Rejestracja: 31 sty 2007, 19:17
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

Odp: Irexec - restart po wstrzymaniu systemu.

Post autor: yp2 »

up :)
ODPOWIEDZ

Wróć do „Muzyka, filmy, zdjęcia, grafika”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 88 gości