запретить две одинаковых сессии

Модераторы: dimbor, Модераторы разделов

whoim
Сообщения: 91
ОС: CentOS 5.4 X64

запретить две одинаковых сессии

Сообщение whoim »

Одинаковых - в смысле свой rootless-скрипт. Относиться к тому самому тулбару xfce4-panel. Некоторые умудряются запускать оный по два раза..
Что думается - перенести команду запуска xfce4-panel в скрипт на баше и в начале скрипта проводить некие проверки. Но не хотелось бы ориентироваться на запущенность panel под user, хотелось бы инфо вытаскивать из NX. А вот тут опыта уже ноль..
Никто не реализовывал ничего подобного?
PS может, тупо запретить nx запускать две сессии одного юзера? но как?
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: запретить две одинаковых сессии

Сообщение dimbor »

Не устаю делиться единственной ссылкой - Advanced Bash-Scripting Guide.
Рай на отдельно взятом Вашем сервере кроме Вас вряд ли кто устроит.
Спасибо сказали:
whoim
Сообщения: 91
ОС: CentOS 5.4 X64

Re: запретить две одинаковых сессии

Сообщение whoim »

dimbor, спасибо конечно, но эта ссылка мне известна ) Я не прошу готовый скрипт, я прошу поделиться идеей.
Спасибо сказали:
Аватара пользователя
Bluetooth
Сообщения: 4395
Статус: Блюзовый
ОС: Debian Squeeze amd64

Re: запретить две одинаковых сессии

Сообщение Bluetooth »

Я сам сейчас озадачен подобной проблемой. Надеюсь, ситуация на работе сложится так, что я найду время на ее решение. Всвязи с этим у меня вопрос: Могу я к Вам обратиться за помощью в решении этой проблемы?
Спасибо сказали:
whoim
Сообщения: 91
ОС: CentOS 5.4 X64

Re: запретить две одинаковых сессии

Сообщение whoim »

Bluetooth писал(а):
19.07.2010 00:50
Я сам сейчас озадачен подобной проблемой. Надеюсь, ситуация на работе сложится так, что я найду время на ее решение. Всвязи с этим у меня вопрос: Могу я к Вам обратиться за помощью в решении этой проблемы?

ко мне?? Ну как найду решение, ессно тут выложу. Очень хочется это сделать средствами NX, ибо конфигурационные файлики уже разосланы, в строке запуска не скрипт а сразу софт (xfce4-panel), а перенастраивать клиенты ох как лень )

whoim писал(а):
19.07.2010 11:12
Bluetooth писал(а):
19.07.2010 00:50
Я сам сейчас озадачен подобной проблемой. Надеюсь, ситуация на работе сложится так, что я найду время на ее решение. Всвязи с этим у меня вопрос: Могу я к Вам обратиться за помощью в решении этой проблемы?

ко мне?? Ну как найду решение, ессно тут выложу. Очень хочется это сделать средствами NX, ибо конфигурационные файлики уже разосланы, в строке запуска не скрипт а сразу софт (xfce4-panel), а перенастраивать клиенты ох как лень )

А средствами скрипта - надо изучить синтаксис файла, который идет в поставке RX и отвечает за убийство суспендед сессий и на его основе делать так: проверяем запущенность сессии юзера, если есть - убиваем..
а далее свои запуски
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: запретить две одинаковых сессии

Сообщение Djelf »

Не правильно ;)

Вы сначала разберитесь что происходит при запуске второй сессии...

Во первых ее запуск можно подавить установкой ENABLE_AUTORECONNECT=1, при этом клиент запрашивает список сессий, получает, выдает серверу restoresession, сервер выполняет server_startrestore_session("resume"), при этом он сначала вводит сессию в состояние "suspend", а потом поднимает.
Вот на этапе
;;
restoresession*)
server_startrestore_session("resume")
надо вставить проверку на $SESSION_CONT_USER, и дать отбой клиенту, тогда и вторая сессия не поднимется и первую не будет лихорадить, только не "в лоб", а добавив еще одну переменную в node.conf и обработав ее аналогично переменной DISABLE_PERSISTENT_SESSION в nxloadconfig, ну обозвать как то так: ENABLE_ONE_SESSION_LIMIT, а нужно это чтобы оставить возможность перехвата сессии некоторым пользователям на другом компе, себе например.
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: запретить две одинаковых сессии

Сообщение dimbor »

whoim писал(а):
19.07.2010 11:12
А средствами скрипта - надо изучить синтаксис файла, который идет в поставке RX и отвечает за убийство суспендед сессий и на его основе делать так: проверяем запущенность сессии юзера, если есть - убиваем..
а далее свои запуски

Огорчить Вас придется - не получится так. Скрипт выполняется от рута, а сессию запускает юзер. Прав не хватит (см. nxserver --list от одного и другого).
Предлагается такой алгоритм: в nxnode имеется функция startsession(). В ее начало (при $1 != "restore") вставляется код который перебирает у юзера ~/.nx/C-*/pids/apps/*, по пидам получает ком. строки приложений и сравнивает с запускаемым в сессии. При совпадении банкет прерывается (return 1). Для $type="unix-application" переменная $application и будет запускаемым. В остальных случаях (unix-kde,unix-gnome,...) надо будет еще выдергивать переменные строк запуска этих зверей из конфига.

Upd: Прочитал предыдущий ответ и понял, что усложняю. Если "в тупую" не больше одной сессии в одни руки, то ничего не надо сравнивать. Пид есть? Живой? -> запускаться дальше ни хачу!
Спасибо сказали:
whoim
Сообщения: 91
ОС: CentOS 5.4 X64

Re: запретить две одинаковых сессии

Сообщение whoim »

:crazy:
ну в скрипты самого!! NX я еще не лазил..

Djelf писал(а):
19.07.2010 12:19
Не правильно ;)

Вы сначала разберитесь что происходит при запуске второй сессии...

Во первых ее запуск можно подавить установкой ENABLE_AUTORECONNECT=1, при этом клиент запрашивает список сессий, получает, выдает серверу restoresession, сервер выполняет server_startrestore_session("resume"), при этом он сначала вводит сессию в состояние "suspend", а потом поднимает.

Ну, у меня настроено ENABLE_AUTORECONNECT=1, никто никого не лихорадит - вторая сессия поднимается молча

Кстати существует nxserver-usermode --list $USER
Но неработает у меня )
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: запретить две одинаковых сессии

Сообщение Djelf »

whoim писал(а):
20.07.2010 12:27
Ну, у меня настроено ENABLE_AUTORECONNECT=1, никто никого не лихорадит - вторая сессия поднимается молча

Вторая с тем же самым именем? И поднимается? Значит с остальными ключами перешаманили...
whoim писал(а):
20.07.2010 12:27
Кстати существует nxserver-usermode --list $USER
Но неработает у меня )

Естественно, nxserver-usermode работает для сессий запущенных в usermode (не от nx, а от самого пользователя).
Спасибо сказали:
whoim
Сообщения: 91
ОС: CentOS 5.4 X64

Re: запретить две одинаковых сессии

Сообщение whoim »

Djelf писал(а):
20.07.2010 13:13
whoim писал(а):
20.07.2010 12:27
Ну, у меня настроено ENABLE_AUTORECONNECT=1, никто никого не лихорадит - вторая сессия поднимается молча

Вторая с тем же самым именем? И поднимается? Значит с остальными ключами перешаманили...
whoim писал(а):
20.07.2010 12:27
Кстати существует nxserver-usermode --list $USER
Но неработает у меня )

Естественно, nxserver-usermode работает для сессий запущенных в usermode (не от nx, а от самого пользователя).

Я так понял, что для второй переменной надо дорабатывать скрипты nx и обрабатывать ее, или нет?
Речь о ENABLE_ONE_SESSION_LIMIT?
Или DISABLE_PERSISTENT_SESSION?

>запущенных в usermode (
много нового счас узнаю похоже)
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: запретить две одинаковых сессии

Сообщение Djelf »

whoim писал(а):
20.07.2010 14:11
Я так понял, что для второй переменной надо дорабатывать скрипты nx и обрабатывать ее, или нет?

Угу, доработка копипастом в nxloadconfig и головой в nxserver
Спасибо сказали:
whoim
Сообщения: 91
ОС: CentOS 5.4 X64

Re: запретить две одинаковых сессии

Сообщение whoim »

Итак, решил идти по пути без доработки RX ибо оставим это на голову разработчиков. Принцип простой. Все юзеры входят в RX с панелькой xfce4-panel, которая будет запускаться только через свой скрипт. Который вначале будет что то проверять и только потом реагировать на то, на се..
Тут два варианта проверки.
1) Проверить, запущенна ли сессия у текущего пользователя. Как??? Без прав root неполучается.. Пробовал анализом /var/lib/nxserver/db/.. но туда тоже доступ только у руга, утилитами nxserver и -usermode то же самое..
2) Проверять на запущенность например ту же xfce4-panel у текущего пользователя. Пока возможно так: ps axfu | grep who | grep "\_ xfce4-panel"

Вопрос: что лучше делать далее? Как можно закрыть все сессии юзера, все программы от имени юзера (очень желательно, как то так получается что через какое то время работы остаются куча процесов юзера вне сессий)?

По поводу остающихся процессов.. Вот сейчас через nxsadmin закрыл свои сессии.. подключился по ssh

Код: Выделить всё

[who@server-a ~]$ ps axfu | grep "who"
root     14340  0.0  0.0 110460  4520 ?        Ss   Jul15   0:00  \_ sshd: who [priv]
who      14342  0.0  0.0 110612  2392 ?        S    Jul15   0:00  |   \_ sshd: who@notty
root     18983  0.0  0.0 110460  4524 ?        Ss   Jul16   0:00  \_ sshd: who [priv]
who      18986  0.0  0.0 110612  2396 ?        S    Jul16   0:00  |   \_ sshd: who@notty
root     17476  0.0  0.0 110460  4552 ?        Ss   11:27   0:00  \_ sshd: who [priv]
who      17485  0.0  0.0 110612  2488 ?        S    11:27   0:00      \_ sshd: who@pts/28
who      17486  0.0  0.0  86276  2676 pts/28   Ss   11:27   0:00          \_ -bash
who      17964  0.0  0.0  84424  2780 pts/28   R+   11:28   0:00              \_ ps axfu
who      17965  0.0  0.0  63228   796 pts/28   S+   11:28   0:00              \_ grep who
nx       14333  0.0  0.0  28372  1832 ?        Sl   Jul15   0:00 /usr/bin/expect /usr/bin/nxnode-login -- ssh who 50022 /usr/bin/nxnode --slave
nx       14335  0.0  0.0  56316  3088 pts/3    Ss+  Jul15   0:00  \_ ssh -2 -x -l who 127.0.0.1 -o NumberOfPasswordPrompts 1 -p 50022 /usr/bin/nxnode --slave
who      14758  0.0  0.0  64356   952 ?        S    Jul15   0:00 /bin/bash /usr/bin/nxnode --slave
who      14760  0.0  0.0  64488  1896 ?        S    Jul15   0:00  \_ /bin/bash /usr/bin/nxnode --startsession
who      15058  0.0  0.0  64488  1404 ?        S    Jul15   0:00      \_ /bin/bash /usr/bin/nxnode --startsession
who      15062  0.0  0.0  66808  1952 ?        S    Jul15   0:00          \_ /bin/bash /usr/bin/nxnode --startsession
who      15298  0.1  0.4 216228 57080 ?        S    Jul15  13:30          |   \_ /usr/bin/nxagent -persistent -R -name NX - who@server-a:1020 - server-a-panel (GPL Edition) -option /home/who/.nx/C-server-a-1020-8A2BEC8362BE4AA14BF55A55A5018FDC/options -nolisten tcp :1020
who      15065  0.0  0.0  61240   720 ?        S    Jul15   0:00          \_ tee /home/who/.nx/C-server-a-1020-8A2BEC8362BE4AA14BF55A55A5018FDC/session
who      15066  0.0  0.0  64620  1500 ?        S    Jul15   0:00          \_ /bin/bash /usr/bin/nxnode --startsession
who      15411  0.0  0.0  15176   528 ?        S    Jul15   0:00 /usr/bin/dbus-launch --exit-with-session /usr/bin/nxredir xfce4-panel
who      15412  0.0  0.0  34884   968 ?        Ss   Jul15   0:00 /bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session
who      31131  0.0  0.0 167468  5708 ?        Ss   Jul15   0:00 kdeinit Running...
who      31136  0.0  0.0 172128  7516 ?        S    Jul15   0:00  \_ klauncher [kdeinit]
who      31134  0.0  0.0 132976  3588 ?        S    Jul15   0:00 dcopserver --nosid --suicide
who      31138  0.0  0.0 171372  9532 ?        S    Jul15   0:00 kded
who      31142  0.0  0.1 231464 14584 ?        S    Jul15   0:00 knotify [kdeinit]
who      31145  0.0  0.0  80856 10224 ?        S    Jul15   0:00 /usr/bin/artsd -F 10 -S 4096 -s 60 -m artsmessage -l 3 -f
who       4858  0.0  0.1 189124 17144 pts/15   Ss+  Jul16   0:00 kdesu /usr/sbin/nxsadmin
nx       18972  0.0  0.0  28372  1832 ?        Sl   Jul16   0:00 /usr/bin/expect /usr/bin/nxnode-login -- ssh who 50022 /usr/bin/nxnode --slave
nx       18974  0.0  0.0  56316  3084 pts/1    Ss+  Jul16   0:00  \_ ssh -2 -x -l who 127.0.0.1 -o NumberOfPasswordPrompts 1 -p 50022 /usr/bin/nxnode --slave
who      19422  0.0  0.0  64356   956 ?        S    Jul16   0:00 /bin/bash /usr/bin/nxnode --slave
who      19424  0.0  0.0  64488  1896 ?        S    Jul16   0:00  \_ /bin/bash /usr/bin/nxnode --startsession
who      19716  0.0  0.0  64488  1404 ?        S    Jul16   0:00      \_ /bin/bash /usr/bin/nxnode --startsession
who      19723  0.0  0.0  66808  1952 ?        S    Jul16   0:00          \_ /bin/bash /usr/bin/nxnode --startsession
who      19949  0.0  0.1 190936 23964 ?        S    Jul16   0:00          |   \_ /usr/bin/nxagent -persistent -R -name NX - who@server-a:1018 - server-a-panel (GPL Edition) -option /home/who/.nx/C-server-a-1018-9B753ACD8DA1CFDCFD96C2B482201BC2/options -nolisten tcp :1018
who      19729  0.0  0.0  61240   720 ?        S    Jul16   0:00          \_ tee /home/who/.nx/C-server-a-1018-9B753ACD8DA1CFDCFD96C2B482201BC2/session
who      19731  0.0  0.0  64620  1500 ?        S    Jul16   0:00          \_ /bin/bash /usr/bin/nxnode --startsession
who      20066  0.0  0.0  15176   524 ?        S    Jul16   0:00 /usr/bin/dbus-launch --exit-with-session /usr/bin/nxredir xfce4-panel
who      20067  0.0  0.0  34884   972 ?        Ss   Jul16   0:00 /bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: запретить две одинаковых сессии

Сообщение Djelf »

whoim писал(а):
21.07.2010 11:29
1) Проверить, запущенна ли сессия у текущего пользователя. Как??? Без прав root неполучается.. Пробовал анализом /var/lib/nxserver/db/.. но туда тоже доступ только у руга, утилитами nxserver и -usermode то же самое..

Это как раз не проблема:

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char *env= getenv("USER");
    char *mycmd = "/usr/bin/nxserver --list ";
    char buf[255]="";
    strcat(buf,mycmd);
    strcat(buf,env);
    setuid(0);
    system(buf);
    return 0;
}

cc inputfile -o nxuserlist
на nxuserlist владелец root и suid, все... будет делать nxserver --list $USER
Спасибо сказали:
whoim
Сообщения: 91
ОС: CentOS 5.4 X64

Re: запретить две одинаковых сессии

Сообщение whoim »

[root@server-a scripts]# cc inputfile -o nxuserlist
inputfile: file not recognized: File format not recognized
collect2: выполнение ld завершилось с кодом возврата 1

в inputfile положил Ваш код..

поправка..
[root@server-a scripts]# cc inp.cc -o nxuserlist
inp.cc: In function ‘int main()’:
inp.cc:13: ошибка: нет декларации ‘setuid’ в этой области видимости
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: запретить две одинаковых сессии

Сообщение Djelf »

А... ну да... расширение у файла должно быть ".c" или "cc -x c inputfile -o nxuserlist"
ну и sudo apt-get install build-essential (может чего не хватает).
ну а скомпилированный вот:
nxlist.zip
(2.42 КБ) 10 скачиваний
Спасибо сказали:
whoim
Сообщения: 91
ОС: CentOS 5.4 X64

Re: запретить две одинаковых сессии

Сообщение whoim »

Взял скомпилированный.
[who@server-a lib]$ /usr/sbin/nxlist
NXSERVER - Version 3.2.0-74-SVN OS (GPL, using backend: 3.4.0)
Usage: nxserver <option>
--passwd: Change password
Спасибо сказали:
Djelf
Сообщения: 615
ОС: Гигтег+Цшт32

Re: запретить две одинаковых сессии

Сообщение Djelf »

А права кто ставить будет?
sudo chown root:root ./nxlist
sudo chmod 4555 ./nxlist
Спасибо сказали:
whoim
Сообщения: 91
ОС: CentOS 5.4 X64

Re: запретить две одинаковых сессии

Сообщение whoim »

права rwx --- ---, UID стоит, владелец root/root

пардоньте, работает, и наконец понял смысл действа)
Спасибо сказали:
whoim
Сообщения: 91
ОС: CentOS 5.4 X64

Re: запретить две одинаковых сессии

Сообщение whoim »

однако в ступор меня ввела следующая мысль. Как в скрипте проверять наличие запущенных сессий, если одна сессия в любом случае запустится - текущая? ))
Вот первый вариант и отпал, остается доработка NX под контроль сессий..
Давайте немного обновим память..

Во первых ее запуск можно подавить установкой ENABLE_AUTORECONNECT=1, при этом клиент запрашивает список сессий, получает, выдает серверу restoresession, сервер выполняет server_startrestore_session("resume"), при этом он сначала вводит сессию в состояние "suspend", а потом поднимает.


Для этого не нужно дорабатывать NX? Достаточно разобраться с ключами в node.conf ?
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: запретить две одинаковых сессии

Сообщение dimbor »

Djelf писал(а):
21.07.2010 12:55
cc inputfile -o nxuserlist
на nxuserlist владелец root и suid, все... будет делать nxserver --list $USER


2Djelf: Мой знакомый рейдер фабрику по производству костылей не знает, куда девать. Не интересует? Обещает быть бешеная прибыль. ;)

В смысле, зачем такие навороты? - Вся инфа о сессиях есть у юзера в каталогах .nx/C-*

whoim писал(а):
21.07.2010 13:52
однако в ступор меня ввела следующая мысль. Как в скрипте проверять наличие запущенных сессий, если одна сессия в любом случае запустится - текущая? ))

На этот случай под сессию экспортируется $NXSESSIONID. Проверяй - не хочу.
Спасибо сказали:
whoim
Сообщения: 91
ОС: CentOS 5.4 X64

Re: запретить две одинаковых сессии

Сообщение whoim »

>На этот случай под сессию экспортируется $NXSESSIONID. Проверяй - не хочу.
Ага! Спасибо! Будем искать инфо как инвертировать условие grep )
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: запретить две одинаковых сессии

Сообщение dimbor »

whoim писал(а):
21.07.2010 15:34
Будем искать инфо как инвертировать условие grep )


А зачем?

Код: Выделить всё

[ -n "$(echo "$varrr" | grep "$NXSESSIONID")" ] && echo "Есть более другие сессии"


Upd: Туплю. Там вместо grep должно быть что-то вроде sed 's/^*'"$NXSESSIONID"'//'
Спасибо сказали:
whoim
Сообщения: 91
ОС: CentOS 5.4 X64

Re: запретить две одинаковых сессии

Сообщение whoim »

До этого я еще не дошел)) Пытаюсь разложить инфо по полочкам

Код: Выделить всё

for f in `/usr/sbin/nxlist | grep '127.0.0.1'`; do

    sessiontype=`echo $f | grep status | cut -d= -f2`
    user=`echo $f | grep userName | cut -d= -f2`
    sessionid=`echo $f | grep sessionId | cut -d= -f2`

#echo "$sessiontype - $user - $sessionid"
#f=`/usr/sbin/nxlist | grep '127.0.0.1'`
echo $f
done

получается

Код: Выделить всё

127.0.0.1 1011 who 192.168.1.222 8705F399032063F06DF39C6A471EAEE3 127.0.0.1 1056 who 192.168.1.222 985064A19E7B116AD931380E68A15BA2
[who@server-a bin]$ ./server-a-panel
127.0.0.1
1011
who
192.168.1.222
8705F399032063F06DF39C6A471EAEE3
127.0.0.1
1056
who
192.168.1.222
985064A19E7B116AD931380E68A15BA2


проблема в том что nxlist выдает всю инфу не разбивая сессии построчно, как nxserver --list

Код: Выделить всё

127.0.0.1       1011    who     192.168.1.222   8705F399032063F06DF39C6A471EAEE3
[who@server-a bin]$ echo $NXSESSIONID
server-a-1011-8705F399032063F06DF39C6A471EAEE3


вот препятствие для проверок типа

Код: Выделить всё

[ -n "$(echo "$varrr" | grep "$NXSESSIONID")" ] && echo "Есть более другие сессии"
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: запретить две одинаковых сессии

Сообщение dimbor »

whoim писал(а):
21.07.2010 16:16
проблема в том что nxlist выдает всю инфу не разбивая сессии построчно, как nxserver --list

Да ну? Крутя забубенные циклы и не окавычивая переменные, еще не такие чудесные эффекты можно получить.

Ваша проблема решается двумя строчками, проверено:

Код: Выделить всё

cursess="$(echo "$NXSESSIONID" | sed 's/'"$HOSTNAME"'-//' | cut -d- -f2)"
[ -n "$(/usr/bin/nxlist | grep 127.0.0.1 | cut -f5 | sed '/^'"$cursess"'$/d')" ] && echo "Есть более другие сессии." || echo "Одын, совсэм одын!"

Даже nxlist для проверки пришлось стянуть, хотя я бы сделал через sudo.

Все вытекает из ссылочки, которую я уже давал. Могу еще раз дать. ;)
Спасибо сказали:
whoim
Сообщения: 91
ОС: CentOS 5.4 X64

Re: запретить две одинаковых сессии

Сообщение whoim »

спасибо ;)

неохота каждому давать судо.. ой как неохота..
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: запретить две одинаковых сессии

Сообщение dimbor »

whoim писал(а):
21.07.2010 16:56
неохота каждому давать судо.. ой как неохота..

дык только на nxserver --list не страшно, что-то типа:
echo "USERS ALL= NOPASSWD: /usr/bin/nxserver --list *" >> /etc/sudo.d/nxserver
Спасибо сказали:
whoim
Сообщения: 91
ОС: CentOS 5.4 X64

Re: запретить две одинаковых сессии

Сообщение whoim »

dimbor писал(а):
21.07.2010 17:05
whoim писал(а):
21.07.2010 16:56
неохота каждому давать судо.. ой как неохота..

дык только на nxserver --list не страшно, что-то типа:
echo "USERS ALL= NOPASSWD: /usr/bin/nxserver --list *" >> /etc/sudo.d/nxserver

А на nxserver --terminate страшновато.. а прийдется, чтобы закрывать сессию ранее запущенную, или в суспенд кидать..
Вопрос: не подскажете как проверять результат nxclient --dialog yesno?
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: запретить две одинаковых сессии

Сообщение dimbor »

Не понял. Речь идет о ритуальном самоубийстве сессии? Тогда куда слать телеграммы? А главное, зачем?
Зря не обратили внимание на мою точку зрения по этой проблеме. Не надо никого "мочить в сортире" ©, надо мягко препятствовать запуску.

Upd:
whoim писал(а):
21.07.2010 17:08
Вопрос: не подскажете как проверять результат nxclient --dialog yesno?


cat nxdialog

Код: Выделить всё

dialog_yesno()
{
        $DIALOG --stdout --title "$DIALOG_CAPTION" --yesno "$DIALOG_MESSAGE" 0 0
        RC=$?
        [ $RC -eq 0 ] && return 2
        [ $RC -eq 1 ] && return 0
}
Спасибо сказали:
whoim
Сообщения: 91
ОС: CentOS 5.4 X64

Re: запретить две одинаковых сессии

Сообщение whoim »

>Зря не обратили внимание на мою точку зрения по этой проблеме. Не надо никого "мочить в сортире" ©, надо мягко препятствовать запуску.
Именно реализация: не очень хочется лезть в дебри NX ) Если имеется ввиду не реализация а результат (запускаться не хочу) то так нет проблем и с текущей реализации задачи сделать, но..
Вдруг xfce4-panel подвисла? Вдруг и 1С-ка подвисла? Вдруг.... ??
Холтелось бы выдавать вменяемое предупреждение, что сессия не одна и иметь вариант по подтверждению "мочить в сортире" все что шевелиться)
Или есть другие идеи?

По диалогу: мне бы примерчик пользования.. Присвоил строку запуска окна переменной, пытаюсь в другом окне ее вывести - пусто..

Код: Выделить всё

res=`/usr/bin/nxclient --dialog yesno --caption "Есть запущенные сессии" --message "У Вас уже есть запущенные сессии. Сбросить их?" --class warning`;
 exec /usr/bin/nxclient --dialog ok --caption "Результат" --message "$res" --class info;

Спасибо сказали:
whoim
Сообщения: 91
ОС: CentOS 5.4 X64

Re: запретить две одинаковых сессии

Сообщение whoim »

поддался интуиции: ветка "нет" срабатывает ) "да" не хочет..

Код: Выделить всё

 if [ `/usr/bin/nxclient --dialog yesno --caption "Есть запущенные сессии" --message "У Вас уже есть запущенные сессии. Сбросить их?" --class warning` ]; then
    /usr/bin/nxclient --dialog ok --caption "Результат" --message "Да" --class info
 else
    /usr/bin/nxclient --dialog ok --caption "Результат" --message "Нет" --class info
 fi
Спасибо сказали:
Ответить