[Comm] Вопрос по IceWM
Victor Zhuravlyov
=?iso-8859-1?q?vitich_=CE=C1_gmail=2Ecom?=
Вт Сен 11 12:08:16 MSD 2007
Рассказываю по порядку.
Сначала создаются два пользователя remote-powerdown remote-reboot с
соответствующим шеллом )
Есть скрипт использующий expect:
[vitich на vitich poweroff]$ cat ssh_poweroff.expect
#!/usr/bin/expect -f
# usage: ssh_poweroff [terminal_address]
set PASSWORD "FiniSH+OK"
stty -echo
set ADDRESS "[lrange $argv 0 0]"
puts "\n*** Halting the terminal $ADDRESS ***\n"
spawn ssh remote-poweroff@$ADDRESS
puts "*** Waitimg for 'assword' ..."
expect {
"assword" {puts "*** Sending password ***" ; send "$PASSWORD\n" }
timeout {puts "*** Timeout ..." ; exp_continue}
}
send_user "*** Waiting for terminal halt ... ***"
expect {
"system" {}
"reboot" {}
"halt" {}
fail {puts "\n*** SSH connect broken ***\n"}
timeout {puts "*** Timeout ..." ; exp_continue}
}
puts "\n*** OK ***\n"
И есть два скрипта /usr/bin/rpoweroff и /usr/bin/rreboot
Почти всё позаимствовано у скрипта display2menu Миши Шигорина дабы
определить адрес x-терминала для выключения.
[vitich на vitich poweroff]$ cat rpoweroff
#!/bin/bash
debug() {
[ -n "$DEBUG" ] && echo "$*" >&2
}
LC_MESSAGES=C
RESOLVE=/usr/bin/resolve
get_ip() {
[ -x "$RESOLVE" ] && {
IP="`resolve -s $HOST 2>/dev/null`"
[ -z "$IP" ] && {
debug "Can't resolve $HOST, using as is"
IP="$HOST"
}
echo $IP
} || {
debug "No $RESOLVE executable!"
}
}
[ -z "$DISPLAY" ] && {
debug "No DISPLAY defined!"
exit
}
HOST=${DISPLAY%%:*}
DISP=${DISPLAY##*:}
case "$HOST" in
# I know it's a shell pattern... so 80% solution
[0-9]*.[0-9]*.[0-9]*.[0-9]*)
IP="$HOST"
debug "X-terminal; IP: $IP"
;;
[a-zA-Z]*)
IP="`get_ip $HOST`"
debug "X-terminal; host: $IP"
;;
*)
HOST="`hostname 2>/dev/null`"
IP="`get_ip $HOST`"
debug "Local display; $HOST"
esac
ssh_poweroff.expect $IP
Второй скрипт аналогичный.
Так вот если запускать из-под рядового пользователя из xterm - работает.
Прописал в ~/.icewm/preferences и /etc/X11/icewm/preferences
RebootCommand="rreboot"
ShutdownCommand="rpoweroff"
С /usr/bin тоже пробовал прописывать, хотя смысл? В консоли работает и без пути
Скрипт на expect не мой, я не программер :)
Может есть более правильное решение по управлению x-терминалом, но
стандартно при попытке перезагрузить или выключить комп с терминала он
просто секунд 10-20 висит, потом перезапускает gdm. А надо тушить.
Подробная информация о списке рассылки community