w00zy |
|
Темы:
20
Сообщения:
336
Участник с: 09 декабря 2008
|
В общем сабж. Температурю, моск плохо работает, гугл плохо ищет. Итак, имеем нужду, допустим, acpi скриптом отработать кнопочку выключения. Тупо при её нажатии запустить типо oblogout для пользователя. Казалось-бы проблем нет. Пишем в скрипт что-то типа export DISPLAY=":0.0" export XAUTHORITY=/home/USERNAME/.Xauthority su USERNAME -c "oblogout" Вроде-бы решение есть в вики getuser () { export DISPLAY=`echo $DISPLAY | cut -c -2` user=`who | grep " $DISPLAY" | awk '{print $1}' | tail -n1` export XAUTHORITY=/home/$user/.Xauthority eval $1=$user } Бред полнейший - 1: Скрипты работают с правами демона, в данном случае рутовыми, и с его - же переменными окружениями - откуда аффтар отсосал $DISPLAY в окружении демона только ему известно. 2: who в таком контексте сработает только если у юзера открыты терминалы (xtrm, vte & etc.) Аффтар школьник, и бредил прямо в вики. Ну и хрен с ним. Я попрошу постить сюда известные Вам способы получения переменных окружений залогиненого пользователя иксов. Может у кого уже есть красивое решение. Мозг, при температуре, только вело-костыльный бред выдает… |
Natrio |
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
В принципе, есть способ получить все переменные окружения для любого процесса – см. /proc/$PID/environ Есть неудобство – в этом псевдофайле строки разделены не \n , а \0 Но думаю, в случае с $DISPLAY можно поступить даже проще – она есть в командной строке запущенных экземплляров X Проблема, собственно, в другом – если запущено несколько сеансов X, я не знаю, как выяснить, какой из них сейчас на экране. Думаю, всё это имеет смысл решать как-то иначе… |
w00zy |
|
Темы:
20
Сообщения:
336
Участник с: 09 декабря 2008
|
Natrio [[email protected] ~]$ ps -C X -f --no-header root 671 663 2 12:46 tty7 00:08:41 /usr/bin/X -nolisten tcp vt07 -dpi 100 -auth /var/run/slim.auth А, вот, через proc достать… Все костыльно, конечно. Я думал, может есть какое простое и элегантное решение, а главное переносимое, которого я не знаю. Там-же, в вики, есть еще костыль DBUS=$(ps aux | grep 'dbus-launch' | grep -v root) if [[ ! -z $DBUS ]];then USER=$(echo $DBUS | awk '{print $1}') USERHOME=$(getent passwd $USER | cut -d: -f6) export XAUTHORITY="$USERHOME/.Xauthority" for x in /tmp/.X11-unix/*; do DISPLAYNUM=$(echo $x | sed s#/tmp/.X11-unix/X##) if [[ -f "$XAUTHORITY" ]]; then export DISPLAY=":$DISPLAYNUM" fi done else USER=w00zy USERHOME=/home/$USER export XAUTHORITY="$USERHOME/.Xauthority" export DISPLAY=":0" fi |
w00zy |
|
Темы:
20
Сообщения:
336
Участник с: 09 декабря 2008
|
UPDATE.w00zy Температура думать не дает. Через /proc и правда интересно. Можно сразу все, и наличие иксов проверить, и … Точно копать сюда. [[email protected] .X11-unix]$ ps -C X -f --no-header root 671 663 2 12:46 tty7 00:09:26 /usr/bin/X -nolisten tcp vt07 -dpi 100 -auth /var/run/slim.auth [[email protected] .X11-unix]$ sudo cat /proc/671/environ | tr "\0" "\n" CONSOLE=/dev/console SHELL=/bin/sh TERM=linux INIT_VERSION=sysvinit-2.88 PATH=/sbin:/usr/sbin:/bin:/usr/bin RUNLEVEL=5 PWD=/ PREVLEVEL=N SHLVL=0 DISPLAY=:0.0 XAUTHORITY=/var/run/slim.auth А уж openbox вообще всю подноготную выдает :) |