Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2011-02-27 11:45:19

  Zolnierzu - Użytkownik

Zolnierzu
Użytkownik
Skąd: Koszalin/Poznań
Zarejestrowany: 2007-09-22
Serwis

[bash] Wymuszenie dokończenia wykonywania skryptu

witam,
moim celem jest napisanie skryptu, który podmieni plik xorg.conf, a następnie zresetuje serwer Xów. Wygląda prosto, ale mam jeden problem. Kiedy wywołuję ten skrypt spod gnome-terminala zamiast restartu Xów dostaję czarny ekran(śmierci ;)). Dopiero uruchomienie skryptu np na tty1, albo ręczne zresetowanie Xów poprzez wywołanie "/etc/init.d/gdm3 restart" naprawia ten stan.
Podejrzewam, że problem tkwi w tym, że wywołując skrypt spod Xów chłopak zabija też siebie jako, że jest dzieckiem sesji w której został wywołany. Dobrze kombinuję?
Macie jakiś pomysł na rozwiązanie tego problemu?
Zawartośc skryptu:

Kod:

#!/bin/bash
normal="/etc/X11/xorg.conf.backup"
twin="/etc/X11/xorg.conf.twin"
rotated="/etc/X11/xorg.conf.twin.rotated"
xorg="/etc/X11/xorg.conf"

if [ "$1" = "normal" ]
then
    echo -n `cp $normal $xorg`
    echo -n `/etc/init.d/gdm3 restart`
    exit
fi

if [ "$1" = "twin" ]
then
    echo -n `cp $twin $xorg`
    echo -n `/etc/init.d/gdm3 restart`
    exit
fi

if [ "$1" = "rotated" ]
then
    echo -n `cp $rotated $xorg`
    echo -n `/etc/init.d/gdm3 restart`
    exit
fi

if [ "$1" = "--help" ] || [ "$1" = "-h" ]
then
    echo "Skrypt podmienia pliki xorg.conf i resetuje Xy";
    echo "";
    echo "Opcje:";
    echo -e "normal \t włącza jedynie monitor laptopa";
    echo -e "twin \t ustawia oba monitory jako aktywne";
    echo -e "rotated \t ustawia oba monitory jako aktywne i obraca hpeka o 90 stopni"
    exit
fi

Registered Linux user number 467822, (15-03-2008)

Offline

 

#2  2011-02-27 11:53:45

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: [bash] Wymuszenie dokończenia wykonywania skryptu

podpowłoka?

Kod:

azhag@laptop /tmp % cat skrypt.sh
#!/bin/sh

echo 'jestem wesołym echem'
( sleep 10; echo 'nikt nie spodziewa się hiszpańkiej inkwizycji!' ) &
sleep 5
echo 'jestem smutnym echem, bo zanim się wykonam ktoś zabije skrypt :('

azhag@laptop /tmp % sh skrypt.sh &
[1] 23428
azhag@laptop /tmp % jestem wesołym echem 
azhag@laptop /tmp % kill 23428
[1]  + 23428 terminated  sh skrypt.sh                                                                                                            
azhag@laptop /tmp % nikt nie spodziewa się hiszpańkiej inkwizycji!

Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#3  2011-02-27 12:43:48

  Zolnierzu - Użytkownik

Zolnierzu
Użytkownik
Skąd: Koszalin/Poznań
Zarejestrowany: 2007-09-22
Serwis

Re: [bash] Wymuszenie dokończenia wykonywania skryptu

No, rzeczywiście! Dzięki azhag, ja tu już się głowiłem jak tu zrobić z tego wywołania proces zombie :D

Mam jeszcze jedno pytanie - tego mojego skryptu nie mogę uruchomić jako zwykły użytkownik ze względu na komendę echo -n `/etc/init.d/gdm3 restart`, która wymaga praw administrator. Natomiast ctrl+alt+bacspace resetują sesję bez pytania o hasło su. Nasuwa się pytanie - czym zastąpić `/etc/init.d/gdm3 restart` aby zwykły użytkownik mógł wywołać skrypt?


Registered Linux user number 467822, (15-03-2008)

Offline

 

#4  2011-02-27 13:55:23

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: [bash] Wymuszenie dokończenia wykonywania skryptu

Zolnierzu napisał(-a):

Nasuwa się pytanie - czym zastąpić `/etc/init.d/gdm3 restart` aby zwykły użytkownik mógł wywołać skrypt?

sudo


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#5  2011-02-27 16:38:48

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: [bash] Wymuszenie dokończenia wykonywania skryptu

Nawiasem mówiąc, zamiast tej ifologii zastosuj konstrukcję case (być może w duecie z getopt(s)). To nie perl ;) .

Offline

 

#6  2011-02-27 17:15:46

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: [bash] Wymuszenie dokończenia wykonywania skryptu

Czy chodziło Ci o coś takiego?

Kod:

#!/bin/bash
function ustaw_jack
{
echo "ustawiam konfig na jacka";
sudo rm /etc/asound.conf 
sudo cp /home/asound.jack /etc/asound.conf;
echo "jack w asound ustawiony";
#restart alsasound;
}

function ustaw_dmix
{
echo "ustawiam konfig na dmix";
sudo rm /etc/asound.conf 
sudo cp /home/asound.dmix /etc/asound.conf;
echo "dmix w asound ustawiony";
#restart alsasound;
}

grep jack /etc/asound.conf &>/dev/null  &&  ustaw_dmix || ustaw_jack;
exit 0;

Działa prawidłowo.

Pozdrawiam
;-)

Ostatnio edytowany przez Jacekalex (2011-02-27 17:30:02)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)