Во второй версии Thinstation присутствовало меню выбора сессии при загрузке — Replimenu. Хоть оно было страшненькое и порой вгоняло в ступор неподготовленного пользователя, привыкшего к полноценному графическому режиму, но работало. В пятой версии оно «сломалось», а разработчики никакой замены не прикрутили, на вопрос «Куда делось меню» ответили:
Меня такой подход к решению проблемы не устроил и потому я решил сделать своё меню для выбора сессии, благо функционал Thinstation это позволяет.
С разбега реализовать полноценную замену, чтобы автоматом цепляло любой вариант сессии из конфигурационного файла, не вышло, да и не было такой задачи. Нужно было предоставить пользователю выбор подключения к одному из трёх терминальных серверов на Windows.
Для отображения меню будем использовать утилиту Zenity, которая выводит на экран диалоговые окна из командной строки и скриптов командной оболочки.
Создаём папки и файлы пакета, я его назвал xmenu, копируем в него курсор и шрифт:
Скопируйте в xmenu/etc/init.d/xmenu скрипт инициализации:
В xmenu/bin/xmenu скопируйте сам скрипт меню:
Этот скрипт подходит для запуска freerdp и rdesktop сессий, через 30 секунд бездействия (параметр --timeout=30) компьютер выключится.
Пакет меню готов, включаем его в сборку строчкой package xmenu в файле build.conf.example и собираем образ.
В 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/{fonts/X11/TTF,icons/default/cursors}} cp icons-cursor/lib/icons/dmz-aa/cursors/top_left_arrow xmenu/lib/icons/default/cursors cp fonts-TTF-liberation/lib/fonts/X11/TTF/LiberationMono-Regular.ttf xmenu/lib/fonts/X11/TTF echo -e "base\nzenity\npango\nfontconfig" > 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) компьютер выключится.
Пакет меню готов, включаем его в сборку строчкой package xmenu в файле build.conf.example и собираем образ.
В 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 на cat, иначе в меню получите крякозябры.catv /tmp/"$CONFNET"network |sed -e 's/\^M//g' >> $TS_NETWORK 2> /dev/null
В принципе можно во всём файле заменить catv на cat, хуже не будет.