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
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
Kod: Zaznacz cały
#!/bin/bash
kill $1
exit 0
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
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
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
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 &
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
Co robię źle.
Pozdrawiam