cblp 27.12.2010 23:50

Tips & tricksИнтернет каждому дедушке!

spacer.gif?sign=37535465.89030162.1293524168.09b5074db3a420852f80427f9b291497Дано 1 компьютер в пользовании n человек — 1 программист, использующий многие возможности компьютера и Интернета, и (n?1) обычный человек, обозревающие веб и жаберы-скайпы понемножку.

Надо сделать так, чтобы все могли поочереди пользоваться компом и друг другу не мешали.

С отдельными учётными записями заморачиваться не хотелось, ибо защищать нам друг от друга — а точнее, мне от всех остальных — в общем-то, нечего. К тому же, в семье есть представители старшего, очень старшего поколения, которым пришлось бы долго, очень долго объяснять, что такое пароль и как его вводить, а учётку без пароля заводить некошерно. А поскольку проблема была только с разделением доступа к браузеру, то решено было ограничиться рабочими столами и профилями Firefox.

Задача Настроить удобное использование n профилей Firefox на n рабочих столах.
Предлагаемое решение На панели Гнома у меня n=4 кнопки для запуска специального скрипта-обёртки над Firefox. Скрипт проверяет, не запущен ли браузер с нужным профилем, если запущен, то переносит пользователя к его окну, если же нет, запускает Firefox на нужном столе.

В процессе решения задачи столкнулся с такой особенностью: при типичном использовании Компиза у вас один рабочий стол в терминах X, а все «рабочие столы» Компиза для X выглядят как вьюпорты. Вьюпорт («viewport», не смог подобрать аналог) — это отображаемый на физическом экране в конкретный момент времени кусок логического рабочего стола. Опытные товарищи вспомнят, наверное, как ставили в XF86Config размер рабочего стола больше размера экрана и играли в воображаемую Дюну-2 иконками на десктопе.

Соответственно, в Компизе вместо рабочих столов и граней кубика надо переключать вьюпорты.

Код

Обёрточка firefox-wrapper

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash

viewportX=$1
viewportY=$2
profile=$3

< "_$viewportX" == "_" > && { exit 1; }
< "_$viewportY" == "_" > && { exit 1; }
< "_$profile" == "_" > && { exit 1; }

# check if firefox is already running
pid=$( ps ax | grep "<0-9> /usr/lib/firefox-<0-9\.>\+/firefox-bin -no-remote -P ${profile}" | awk '{print $1}' )
if < "_$pid" != "_" >; then
# if running, find the window and raise it
windowId=$( wmctrl -l -p | awk "{if(\$3==${pid}) print \$1}" )
wmctrl -i -a $windowId
else
# otherwise, go to the specified viewport
compiz-scroll-wmctrl $viewportX $viewportY
# and run firefox there
firefox -no-remote -P $profile &
fi



Скрипт для перехода к нужному рабочему столу для компизовой «стены»

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/bash
#
# compiz-scroll-wmctrl - Scroll the wall using wmctrl
#
# Author: Juri Syrowiecki <cblp@cblp.su>
# Based on compiz-rotate-wmctrl by Shang-Feng Yang <storm dot sfyang at gmail dot com>
# Released under GPLv3

VER="1.0"


function scrollTo() {
# The coordinates of the target viewport
targetViewportX=$(( ${targetViewportNumberX} * ${viewportWidth} ))
targetViewportY=$(( ${targetViewportNumberY} * ${viewportHeight} ))

# Change to the target viewport
wmctrl -o ${targetViewportX},${targetViewportY}
}

function usage() {
echo -e "$(basename $0) v${VER}\n"
echo -e "Usage:\n"
echo -e "\t$(basename $0) # # <profile>\n"
echo -e "\tWhere:\n"
echo -e "\t\t# # - scroll to face #,# (begin with 0)\n\n"
echo -e "Author: Yuri Syrowiecki <cblp@cblp.su>"
echo -e "Based on compiz-rotate-wmctrl by Shang-Feng Yang <storm dot sfyang at gmail dot com>"
echo -e "Released under GPLv3"
}

targetViewportNumberX=$1
targetViewportNumberY=$2

< "_$targetViewportNumberX" == "_" -o "_$targetViewportNumberY" == "_" > && { usage; exit 1; } || {
case $targetViewportNumberX$targetViewportNumberY in
<0-9>|<0-9><0-9>|<0-9><0-9><0-9>|<0-9><0-9><0-9><0-9>)
;;
*)
usage
exit 1
;;
esac
}


# The informations about the desktop
INFO1=$(wmctrl -d)
INFO2=$(xwininfo -root | grep geometry)
# The width of the desktop
desktopWidth=$(echo "${INFO1}"| awk '{sub(/x<0-9>+/, "", $4); print $4}')
desktopHeight=$(echo "${INFO1}"| awk '{sub(/<0-9>+x/, "", $4); print $4}')
# The sizes of the viewport
viewportWidth=$(echo "${INFO2}"| awk '{gsub("+0", "", $2); sub(/x<0-9>+/, "", $2); print $2}')
viewportHeight=$(echo "${INFO2}"| awk '{gsub("+0", "", $2); sub(/<0-9>+x/, "", $2); print $2}')
# The number of faces on the cube
numberOfViewportsX=$(($desktopWidth/$viewportWidth))
numberOfViewportsY=$(($desktopHeight/$viewportHeight))

scrollTo $targetViewportNumberX $targetViewportNumberY



Скрипт для перехода к нужному рабочему столу для компизового куба (привожу оригинал, хоть он небезглючен; в частности, некорректно определяется размер вьюпорта; более правильное определение см. в моём скрипте выше)

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/bin/bash
#
# compiz-rotate-wmctrl - Rotate the cube using wmctrl
#
# Author: Shang-Feng Yang
# Released under GPLv3

VER="1.0"


function rotate() {
# The target face number (begins with 0)
TVPN=$(( $1 % ${NF} ))

# The X coordinate of the target viewport
TVPX=$(( ${TVPN} * ${WW} ))

# Change to the target viewport
wmctrl -o ${TVPX},0
}

function usage() {
echo -e "$(basename $0) v${VER}\n"
echo -e "Usage:\n"
echo -e "\t$(basename $0) {left|right|#}\n"
echo -e "\tWhere:\n"
echo -e "\t\tleft - rotate the cube to the left"
echo -e "\t\tright - rotate the cube to the right"
echo -e "\t\t# - rotate to #th face (begins with 0)\n\n"
echo -e "Author: Shang-Feng Yang <storm dot sfyang at gmail dot com>"
echo -e "Released under GPLv3"
}

# The action to be performed. $ACT could be 'left' or 'right' to rotate
# left or right, accordingly. $ACT could also be the number of the face
# to rotate into.
ACT=$(echo $1 |tr '<a-z>' '</a-z><a-z>')

< "x$ACT" == "x" > && { usage; exit 1; } || {
case $ACT in
left|right|<0-9>|<0-9><0-9>)
;;
*)
usage
exit 1
;;
esac
}


# The informations about the desktop
INFO=$(wmctrl -d)
# The width of the desktop
DW=$(echo "${INFO}"| awk '{sub(/x<0-9>+/, "", $4); print $4}')
# The width of the workarea
WW=$(echo "${INFO}"| awk '{sub(/x<0-9>+/, "", $9); print $9}')
# The number of faces on the cube
NF=$(($DW/$WW))
# The X coordinate of the viewport
CVPX=$(echo "${INFO}" |awk '{sub(/,<0-9>+/, "", $6); print $6}')
# Current number of the face in all faces (begins with 0)
CVPN=$(( ${CVPX} / ${WW} ))

< "$ACT" == "right" > && {
ACT=$(( ${CVPN} + 1 ))
} || {
< "$ACT" == "left" > && {
ACT=$(( ${CVPN} - 1 ))
}
}

rotate ${ACT}</a-z>



Без Компиза, с нормальными рабочими столами просто `wmctrl -s `.

Заключение Дедуля мой теперь садится за компьютер, делает всего один клик по своей кнопке и читает новости на Яндексе.
Depends: firefox, gawk, wmctrl, x11-utils


Тэги: compiz Firefox wmctrl браузер дедушка пользователи
+ 7 -
Похожие Поделиться

lastta 28.12.2010 00:04 #
В итоге, если компьютер выключен, дедуле придется его включить, а значит ему придется "долго, очень долго объяснять, что такое пароль и как его вводить", так как "учётку без пароля заводить некошерно"...
cblp 28.12.2010 00:05 #
Забыл сказать, что включён он постоянно, а если выключен, то +1 кнопка, потому что автовход.
hate 28.12.2010 00:35 #
а нельзя было сделать: беспарольный вход, менеджер логинов со списком пользователей (т.е. только выбирать) и простую глобальную комбинацию кнопок, которая переводит на экран логина/выбора активной сессии?
cblp 28.12.2010 06:54 #
Можно, но это потребовало бы намного больше кликов времени на переключение, а также ресурсов для поддержания нескольких копий X-сервера. Дедушка мой с мышкой-то не всегда управиться может, мимо ссылок то и дело промахивается.

Кроме того, как я писал в посте, выигрыша в безопасности от разделения учётных записей я не вижу.
other.bigmouse 28.12.2010 07:34 #
если выключен, то +1 кнопка, потому что автовход.

Т.е. выигрыш от автовхода есть?
cblp 28.12.2010 10:51 #
По сравнению с чем? С отсутствием автовхода? Да, выигрыш в удобстве использования. Проигрыш в безопасности считаю несущественным по сравнению с физической безопасностью компьютера.
coolIce 28.12.2010 09:54 #
Ты выиграешь не столько в безопасности сколько в надежности. "Каждому пользователю по пользователю" - это логичный подход. Ты научил дедушку нажимать на свою кнопку - это то же самое что нажимать на кнопку переключения юзера+1 клик.
cblp 28.12.2010 10:59 #
Какие угрозы надёжности? Изменение пользовательской конфигурации и файлов? Пока до этого не доходило. Разве что кто-то случайно промахнётся мимо одной кнопки и нажмёт другую, но все сколь-нибудь критичные функции спрятаны достаточно глубоко.

Зато очень удобно иметь файлы, общие для всех пользователей (для всех реальных = для одного логического).

Знаю, это попахивает виндовсом, но это слишком простая задача для таких сложных методов.
hate 28.12.2010 23:03 #
есть выигрыш в разделении настроек (профилей). например, всюду крупные буквы, контрастные цвета и т.д.
strk 28.12.2010 10:28 #
"У меня есть задача, но использовать специально предназначенный для её решения способ я не хочу. Подскажите, как сделать по другому."

1. Каждому своя учётка с логином без запроса пароля. В gdm/kdm/что там у вас - имена обязательно с фотографиями и покрупнее.
2. Настройки учёток и рабочего пространства - отклонировать (можно по крону из "эталонной" учётки копировать изменения, если хочется заморочется)
3. При простое происходит или логофф, или просто возврат к экрану выбора пользователя
4. Вуаля!

Различные учётки - это не только защита, но и разделение настроек.
cblp 28.12.2010 10:49 #
Разделять настройки нужно только для Firefox, и профили с этим отлично справляются.

Ваше решение — очень хорошее, если вообще думать о разделении учётных записей.
cblp 28.12.2010 11:00 #
И да, я не просил подсказки, а предлагаю уже готовое решение.
andreas 28.12.2010 11:06 #
А
жаберы-скайпы
как разделять таким способом? Пиши уж до конца! :-) Если серьёзно, мне разделение учётных записей дома тоже никогда не нравилось, но переключать всё отдельно (firefox, icq, skype, mail) тоже муторно... Сейчас всё решилось само собой покупкой n компьютеров, так что голова больше не болит.
cblp 28.12.2010 11:13 #
Скайпом я разрешаю изредка попользоваться всем. То есть разрешаю всегда, пользуются изредка.

Для джаббера у нас разные любимые клиенты. Почту все единодушно предпочитают вебовую, т. е. см. Firefox.

Если ситуация ещё немножко усложнится, скорее всего, буду делить учётки или расставлять компы. Купить-то не проблема, в отличие от размещения, энергопотребления и пр.
galaxyman 28.12.2010 20:00 #
у меня маме 83 - чудно кликает по иконке своего пользователя и вводит пароль
проблема в том, что если у нее что то не получается она топит на все кнопки методом тыка, не понимая что делает,поэтому своя учетка для подобного юзера обязательна иначе можно недосчитаться нужных файлов