LINUX.ORG.RU

Gentoo: chroot и внешние Иксы. Как из самого дна послать «запусти команду»

 , ,


2

1

Доброй ночи, господа.
Поскольку в генте пыхтон2_7 какбе стух, ну почти, вот вот начнёт разлагатцо...то..:-(
На 2_7 крутятся многие «полезные как БАД и ГМО» вещи, например скринлетс (да, я некрофил-свисто_без_предельщик). Про компыз пока что стращъно даже думать.

Собственно, вспышка давления желтой жидкости внутри пустой черепной полости привела меня к идее - cпихнуть скринлетс в chroot. Путем разгрёба тонн логов strace на предмет, чё_куда_почем_как, выяснилось, что цена вопроса 300 с чем то мегабайт. Ну ок. В принципе оно работает, не падает. НО!

Среди скринлетсов есть лаунчер. И тут возникает вопрос. Поскольку указанных команд для лаунчера в чруте нет (ясен пень, нафига тащить хромого, фокс и мате-терминал, ведь тогда туда весь рут прибежит O_O ), то как тогда передать в Иксы (elogind или dbus или что_угодно) или ..ммм...просто наружу «запусти_вот_эту_хрень». Причем, чтобы это было со всеми env, что есть снаружи. То есть как если бы лаунчер был не в чруте,а в текущей сессии иксов?

★★

Твой бы энтузиазм, да на портирование этого чего-то там на Python 3 бы направить.

t184256 ★★★★★
()

-=O_O=-

конечно же id_rsa для passwordless и
из чрута

ssh -f root@127.0.0.1 'DISPLAY=:0 dbus-launch mate-terminal --hide-menubar --geometry=164x50 2>/dev/null 1>/dev/null &'

KosmiK ★★
() автор топика
Ответ на: -=O_O=- от KosmiK

-=:=-

Вот так норм вроде.

ssh -f root@127.0.0.1 'set -o allexport && source ./.ssh/environment && set +o allexport && dbus-launch mate-terminal --hide-menubar --geometry=164x50 2>/dev/null 1>/dev/null &'


А не..ну почти..
Лучше завернуть снаружи в скрипт с & и exit 0
И внутри->наружу запускать этот скрипт с &
Тогда не остается ssh в процессах

KosmiK ★★
() автор топика
Последнее исправление: KosmiK (всего исправлений: 1)
Ответ на: -=:=- от KosmiK

Костылище!

CYB3R ★★★★★
()

-=O_O=-

Облом.
Сраная cgroups.
Все процессы идут как /sshd контрольная группа.
И /usr/bin/cgexec -g «name=openrc:/xdm» не помогает.
Дерьмо....

KosmiK ★★
() автор топика

-=:=-

Вообщем решение есть!!

localhost ~/my_scripts # cat run_daemon_socket.bash 
#!/bin/bash
chroot_pipe="/opt/screenlets/tmp/chroot.pipe"

trap "rm -f $chroot_pipe" EXIT

if [[ ! -p $chroot_pipe ]]; then
    mkfifo $chroot_pipe
fi

while true
do
    if read line <$chroot_pipe; then
        if [[ "$line" == 'quit' ]]; then
            break
        fi
        exec "$line" &
    fi
done

echo "Reader exiting"

и скрипт запуска скринлетсов
#!/bin/bash
xhost +local:

if [[ -p $chroot_pipe ]]; then
    echo "quit" > /opt/screenlets/tmp/chroot.pipe
fi

sleep 0.5
killall -s 9 run_daemon_socket.bash
sleep 0.5

/root/my_scripts/./run_daemon_socket.bash &

spath="/opt/screenlets"
cp -afr /tmp/.X11-unix "$spath/tmp"
cp -afr /tmp/.ICE-unix "$spath/tmp"
cp -afr /tmp/.X0-lock  "$spath/tmp"
chroot "$spath" /bin/bash -c " DISPLAY=:0; ./usr/bin/screenlets-daemon" 2>/dev/null 1>/dev/null &
chroot "$spath" /bin/bash -c " DISPLAY=:0; /usr/bin/python2.7 /usr/share/screenlets/Clock/ClockScreenlet.py" 2>/dev/null 1>/dev/null &
chroot "$spath" /bin/bash -c " DISPLAY=:0; /usr/bin/python2.7 /usr/share/screenlets/ClearCalendar/ClearCalendarScreenlet.py" 2>/dev/null 1>/dev/null &
chroot "$spath" /bin/bash -c " DISPLAY=:0; /usr/bin/python2.7 /usr/share/screenlets/Launcher/LauncherScreenlet.py" 2>/dev/null 1>/dev/null &

KosmiK ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.