Во второй версии Thinstation присутствовало меню выбора сессии при загрузке — Replimenu. Хоть оно было страшненькое и порой вгоняло в ступор неподготовленного пользователя, привыкшего к полноценному графическому режиму, но работало. В пятой версии оно «сломалось», а разработчики никакой замены не прикрутили, на вопрос «Куда делось меню» ответили:
Меня такой подход к решению проблемы не устроил и потому я решил сделать своё меню для выбора сессии, благо функционал Thinstation это позволяет.
С разбега реализовать полноценную замену, чтобы автоматом цепляло любой вариант сессии из конфигурационного файла, не вышло, да и не было такой задачи. Нужно было предоставить пользователю выбор подключения к одному из трёх терминальных серверов на Windows.
Для отображения меню будем использовать утилиту Zenity, которая выводит на экран диалоговые окна из командной строки и скриптов командной оболочки.
Создаём папки и файлы пакета, я его назвал xmenu:
Копируем в xmenu/etc/init.d/xmenu скрипт инициализации:
В xmenu/bin/xmenu копируем сам скрипт меню:
Этот скрипт подходит для запуска freerdp и rdesktop сессий, через 30 секунд бездействия (параметр --timeout=30) компьютер выключится.
Пакет меню готов, добавляем его в файл build.conf строчкой package xmenu и собираем образ.
В thinstation.conf.xxx нужно ЗАМЕНИТЬ переменные сессий на:
После загрузки образа увидим вот такое славное меню:
По моему намного приятнее чем replimenu, всё по русски и пользователям с мышкой удобнее управляться. При нажатии кнопки "Cancel" в меню или Esc на клаве тонкий клиент выключится.
Если кому-то плохо видно, можно увеличить размер шрифта в файле packages/fontconfig/etc/fonts/conf.avail/51-local.conf, приведя его к такому виду и меняя параметр pixelsize:
Если настроена загрузка конфига по сети и в меню названия серверов должны быть написаны по русски (кириллицей), то в файле packages/netfiles/etc/init.d/network_files, в начале 34 строчки
В принципе можно во всём файле заменить catv на cat, хуже не будет.
If you said that replimenu was a menu system to act as a low resource substitute for a window manager, then no, machines that low in resources, that they can not have both a window manager and an application in memory have not been manufactured for over 10 years and are no longer on the support radar.что в вольном переводе означает — таких компов, чтоб совсем мало памяти, лет 10 как не производят, юзайте оконный менеджер со значками на рабочем столе.
Меня такой подход к решению проблемы не устроил и потому я решил сделать своё меню для выбора сессии, благо функционал Thinstation это позволяет.
С разбега реализовать полноценную замену, чтобы автоматом цепляло любой вариант сессии из конфигурационного файла, не вышло, да и не было такой задачи. Нужно было предоставить пользователю выбор подключения к одному из трёх терминальных серверов на Windows.
Для отображения меню будем использовать утилиту Zenity, которая выводит на экран диалоговые окна из командной строки и скриптов командной оболочки.
Создаём папки и файлы пакета, я его назвал xmenu:
cd /Ваша/папка/thinstation/ts/build/packages
mkdir -p xmenu/{etc/{init.d,rc5.d},bin,lib/icons/default/cursors}
cp icons-cursor/lib/icons/dmz-aa/cursors/top_left_arrow xmenu/lib/icons/default/cursors
echo -e "zenity\nfonts-TTF-liberation" > xmenu/dependencies
echo ",dependencies,0,0,,0,,,,,,,,," > xmenu/.dna
echo > xmenu/bin/xmenu
echo > xmenu/etc/init.d/xmenu
chmod 766 xmenu/bin/xmenu
chmod 766 xmenu/etc/init.d/xmenu
cd xmenu/etc/rc5.d
ln -s ../init.d/xmenu xmenu
Копируем в xmenu/etc/init.d/xmenu скрипт инициализации:
#! /bin/sh
. $TS_GLOBAL
case "$1" in
init)
if ! pkg_initialized $PACKAGE; then
pkg_set_init_flag $PACKAGE
fi
;;
console)
exec /bin/xmenu
;;
help)
echo "Usage: $0 {init|console}"
;;
*)
exit 1
;;
esac
exit 0
В xmenu/bin/xmenu копируем сам скрипт меню:
#!/bin/sh
. $TS_GLOBAL
#Получаем IP клиента
IPSHOW=$(ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}')
#Опции курсора и фонового цвета
xsetroot -cursor_name top_left_arrow -solid rgb:4B/69/83
#Menu zenity:
ip=`zenity --list --timeout=30 --height=250 --print-column=1,2 --hide-column=1,2 --text="ХОСТ: $(hostname) ||| IP: $IPSHOW""\n"'<span foreground="blue">\nДля выключения компьютера нажмите [Cancel]\nДля подключения выберите сервер и нажмите [OK]\n</span>' --column "type" --column "server" --column "Выберите сервер:" "$MENU_1_TYPE" "$MENU_1_SERVER" "$MENU_1_TITLE" "$MENU_2_TYPE" "$MENU_2_SERVER" "$MENU_2_TITLE" "$MENU_3_TYPE" "$MENU_3_SERVER" "$MENU_3_TITLE"`
retval=$?
#Действия в при выборе или отмене:
case $retval in
0)
#Получаем IP сервера:
ipserver=$(echo $ip | awk -F'|' '{ print $2 }')
#проверка условия если rdesktop и задан юзер, то:
if echo $ip | grep rdesktop && echo $ip | grep -u ; then
rdesktop $RDESKTOP_OPTIONS $ipserver
#проверка условия если rdesktop без юзера, то:
elif echo $ip | grep rdesktop; then
rdesktop -u '' $RDESKTOP_OPTIONS $ipserver
#проверка условия если freerdp, то:
elif echo $ip | grep freerdp; then
xfreerdp $FREERDP_OPTIONS /v:$ipserver
#Есле сервер не выбран и нажата кнопка ОК, то выдаётся сообщение:
else zenity --warning --text="Вы не выбрали сервер.\n Попробуйте еще раз..."
xmenu
fi;;
#Если нажата кнопка [Cancel] или Esc на клаве, то выключить комп:
1|5|-1)
poweroff;;
esac
exit 0
Этот скрипт подходит для запуска freerdp и rdesktop сессий, через 30 секунд бездействия (параметр --timeout=30) компьютер выключится.
Пакет меню готов, добавляем его в файл build.conf строчкой package xmenu и собираем образ.
В thinstation.conf.xxx нужно ЗАМЕНИТЬ переменные сессий на:
# Автоматический запуск меню, не изменять
SESSION_0_TYPE=xmenu
SESSION_0_AUTOSTART=On
# Опции подключений, замените на свои:
RDESKTOP_OPTIONS="-x 0x90 -N -a 16 -f -k ru -x l"
FREERDP_OPTIONS="+fonts -sec-tls -sec-nla"
# Ниже название сетвера, тип подключения и IP сервера
MENU_1_TITLE="Сервер1"
MENU_1_TYPE=rdesktop
MENU_1_SERVER=192.168.111.100
MENU_2_TITLE="Сервер2"
MENU_2_TYPE=freerdp
MENU_2_SERVER=192.168.111.100
MENU_3_TITLE="Сервер3"
MENU_3_TYPE=freerdp
MENU_3_SERVER=192.168.111.100
После загрузки образа увидим вот такое славное меню:
По моему намного приятнее чем replimenu, всё по русски и пользователям с мышкой удобнее управляться. При нажатии кнопки "Cancel" в меню или Esc на клаве тонкий клиент выключится.
Если кому-то плохо видно, можно увеличить размер шрифта в файле packages/fontconfig/etc/fonts/conf.avail/51-local.conf, приведя его к такому виду и меняя параметр pixelsize:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!-- Load local system customization file -->
<match target="font">
<edit name="pixelsize" mode="assign"><int>22</int></edit>
</match>
<include ignore_missing="yes">local.conf</include>
</fontconfig>
Получим вот ТАКОЕ меню:Если настроена загрузка конфига по сети и в меню названия серверов должны быть написаны по русски (кириллицей), то в файле packages/netfiles/etc/init.d/network_files, в начале 34 строчки
catv /tmp/"$CONFNET"network |sed -e 's/\^M//g' >> $TS_NETWORK 2> /dev/null
заменить catv на cat, иначе в меню получите крякозябры.В принципе можно во всём файле заменить catv на cat, хуже не будет.
Комментарии (8)
shweew
14.10.2015 10:30На случай если вдруг пользователи подслеповаты добавил в статью способ увеличения шрифта в меню.
ZimniY
Надписи на кнопках тоже можно поменять.
shweew
Да, вроде бы можно, типа --ok-label=Выбрать --cancel-label=Отмена, я не пробовал.
ZimniY
Если надписи перевести — то можно убрать часть шпаргалки из Label. Да и более «локализовано» выглядеть будет.
shweew
Согласен, надо попробовать.
shweew
Посмотрел мануал zenty, эти опции не сработают, они для диалогов Question и Text, завтра попробую, но вряд ли, скорее всего когда делал меню тоже пытался, для чего бы я шпаргалку писал…
shweew
--ok-label=Выбрать --cancel-label=Отмена не работает для диалога List…