Как и многие работаю за несколькими машинами. Естественно хотелось бы юзать одни и те же проги с одними и теми же профилями.
Как и многие использую для этого (синхронизации профилей) Dropbox.
Но хочется локального решения.
В целом идея следующая.
1 Берём флэшку и создаём на ней диск под профили. Дааём ему лэйблу, ну скажем token-system.
2 В /etc/udev/rules.d добавляем файл 90-tokens.rules со следующими правилами:
ACTION=="add", ENV{ID_FS_LABEL}=="token-system", RUN="/usr/sbin/tokenscontrol add"
ACTION=="remove", ENV{ID_FS_LABEL}=="token-system", RUN+="/usr/sbin/tokenscontrol remove"
3 В /etc/fstab строку:
LABEL=token-system /mnt/token-system ext4 defaults,noauto,noatime 0 2
4 В /usr/sbin файл tokenscontrol:
#!/bin/bash
if [ $1 = "add" ]
then
# Монтируем основную файловую систему
mount /mnt/token-system
# Передаём управление скриптам токена
/mnt/token-system/system/connect
exit 0
else
#тут пока ничего...
fi
5 На самом диске есть папка system в которой есть скрипт connect:
#!/bin/bash
# Конфигурация
. $0.conf
env DISPLAY=:0.0 XAUTHORITY='${XAUTHORITY-/home/alex/.Xauthority}' notify-send -t 3 "$TOKENNAME" "подключен"
# Останавливаем приложения по хорошому
killall -u $TOKENSUSER -15 $STOPAPP
# Создаём резервную копию папки
# todo
mkdir -p $BUDIR
rm -rfv $BUDIR/data_old.tar
mv $BUDIR/data.tar $BUDIR/data_old.tar
tar -vczf $BUDIR/data.tar /mnt/token-system/data
# Останавливаем приложения по плохому
killall -u $TOKENSUSER -9 $STOPAPP
# Биндим конфиги
sudo bindfs -o perms=0770,mirror=$TOKENSUSER,group=$TOKENSUSER путь1 путь2
# Запускаем стартующие программы
и файл connect.conf:
# Имя токена
TOKENNAME="alex"
# Имя пользователя
TOKENSUSER="alex"
# Папка резервного копирования
BUDIR="/home/alex/Dropbox/token/bu"
# Останавливаемые приложения
STOPAPP="opera gtg"
Должно работать примерно так:
При вставке флэшки срабатывает событие и запускается скрипт tokenscontrol, который маунтит флэху и передают управление скрипту коннекта.
Тот считывает конфигурацию, останавливает проги которым будут подменены конфиги, делает локальный бэкап флэхи, убивает те проги которые не захотели остановится и биндит каталоги с конфигами. После этого перезапустит остановленные проги.
Пользователь решил продолжить мысль 18 Октября 2010, 11:01:00:
Обработчик выдернутой флэхи и дисконнект пока не рассматриваем.
Что непонятно:
как узнать дисплей юзера если он уже залогинен? Пока в скритпе DISPLAY=:0.0 - но это не универсально
как полностью импортировать окружение для перезапускаемых прог?