Здрастє, я Tarasius. Це мій бложик.

Особисті думки, нариси, проекти та коротко про мене

Меню завантаження для Raspberry Pi

bootmenu

Меню завантаження

Якщо Ви не хочете тримати ваш Распі включеним весь час, а при включенні економити час на запуску рутинних команд, я рекомендую зробити меню загрузки. Окрім того його можна зробити різним для конекту по SSH та при фызичному запуску системи. Тобто при включенны Распі Ви будете бачити на під’єднаному екрані одне меню, а при віддаленому підключенні з іншог пристрою – інше. Різні меню потрібні щоб не вивидити непотрібні опції. Наприклад, якщо у Вас стоіть медіа-центр чи якась іграшка, Ви можете винести її в меню фізичної загрузки, але не показувати в меню для SSH. Також для того щоб система не простаювала із запущеним меню весь час, зробимо таймаут і запуск якогось пункту за замовченням. Ви можете це прибрати зі скрипту. Також зекономимо час на натисненні ентера і будемо вважати, що для вибору пункту достатньо натиснення однієї клавіші. Якщо натиснута була циферка, запускаємо відповідний пункт меню. Інакше – пунк за замовченням.Зверху виведеного меню виводиться загальна інформація про температуру, аптайм та інше. Зліва малюється імпровізована малинка. Весь текст виводиться на різнокольоровому фоні. Все це звісно також можна змінити за смаком.

Все вище описане буде працювати як скрипт на баші, який ми додамо в автозавантаження. Для цього створимо пустий файл /usr/local/bin/, назвемо файл bootmenu і дамо йому максимальні права. Далі знайдемо в домашній директорії (/home/pi/) файл .bashrc і додамо у самий кінець запуск нашого скрипту. До речі, тут же можна встановити і шрифт для консолі. Так як в мене телевізор 32″, а читати текст я хочу з відстані хоча б метра два, я поставив крупніший шрифт, який прекрасно підходить для завантажувального меню.

Отже, вибір шрифта. Знайдіть підходящий файл в/usr/share/consolefonts/ і напишіть в .bashrc, наприклад, таке:

setfont /usr/share/consolefonts/CyrSlav-TerminusBold28x14.psf.gz

Далі додамо завантаження нашого меню. Зробимо щоб воно з’являлось тільки якщо сесія стартує. Тобто, при виході з LXDE наприклад, нема сенсу показувати меню знову.

if [ "$DISPLAY" == "" ]; then
/usr/local/bin/bootmenu
fi

Далі відредагуємо файл bootmenu:

#!/bin/bash
###########################################################
# Simple Startup Menu
# Author: Http://tarasius.name
###########################################################
clear

let upSeconds="$(/usr/bin/cut -d. -f1 /proc/uptime)"
let secs=$((${upSeconds}%60))
let mins=$((${upSeconds}/60%60))
let hours=$((${upSeconds}/3600%24))
let days=$((${upSeconds}/86400))
UPTIME=`printf "%d days, %02dh%02dm%02ds" "$days" "$hours" "$mins" "$secs"`
TTEMP=`sudo vcgencmd measure_temp`

# get the load averages
read one five fifteen rest < /proc/loadavg

echo "
$(tput setaf 2)$(tput setab 0) .~~. .~~. $(tput setab 5)$(tput bold ; tput setaf 7) `date +"%A, %e %B %Y, %r"`$(tput el)
$(tput setab 0)$(tput setaf 2) '. \ ' ' / .' $(tput setab 5)$(tput bold ; tput setaf 7) `uname -srmo`$(tput el)
$(tput setab 0)$(tput setaf 2) .~ .~~~..~. $(tput setab 5)$(tput bold ; tput setaf 7) Temperature........: ${TTEMP}$(tput el)
$(tput setab 0)$(tput setaf 1) : .~.'~'.~. : $(tput setab 5)$(tput bold ; tput setaf 7) Total: `cat /proc/meminfo | grep MemFree | awk {'print $2'}` kB / Free: `cat /proc/meminfo | grep MemTotal | awk {'print $2'}` kB$(tput el)
$(tput setab 0)$(tput setaf 1) ~ ( ) ( ) ~ $(tput setab 5)$(tput bold ; tput setaf 7) Uptime.............: ${UPTIME}$(tput el)
$(tput setab 0)$(tput setaf 1)( : '~'.~.'~' : ) $(tput setab 5)$(tput bold ; tput setaf 7) Load Averages......: ${one}, ${five}, ${fifteen} (1, 5, 15 min)$(tput el)
$(tput setab 0)$(tput setaf 1) ~ .~ ( ) ~. ~ $(tput setab 5)$(tput bold ; tput setaf 7) Running Processes..: `ps ax | wc -l | tr -d " "`$(tput el)
$(tput setab 0)$(tput setaf 1) ( : '~' : ) $(tput setab 5)$(tput bold ; tput setaf 7) IP Addresses.......: `/sbin/ifconfig eth0 | /bin/grep "inet addr" | /usr/bin/cut -d ":" -f 2 | /usr/bin/cut -d " " -f 1`$(tput el)
$(tput setab 0)$(tput setaf 1) '~ .~~~. ~' $(tput setab 5)$(tput el)
$(tput setab 0) '~' $(tput setab 5)$(tput el)$(tput sgr0)"

wait=25
hostname=`hostname|tr '[:lower:]' '[:upper:]'`

st=0
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ];
then
st=1
else
case $(ps -o comm= -p $PPID) in
sshd|*/sshd) st=1;;
esac
fi

if [ $st -eq 1 ];
then
# SSH connection
echo -n "$(tput setab 4)$(tput bold ; tput setaf 2)Raspberry Pi меню загрузки - Host: [$hostname]$(tput el)
$(tput setaf 5)============================================$(tput el)
$(tput bold ; tput setaf 3)1) Віртуальний LXDE робочий стіл$(tput el)
2) Midnight commander$(tput el)
3) Консоль адміністратора$(tput el)
4) Консоль$(tput el)
$(tput setaf 5)============================================$(tput el)"

echo "
$(tput setab 0)$(tput bold ; tput setaf 7)У Вас є $wait секунд для вибору. Виберіть пункт (1,2,3,4) [4]: "
read -t $wait -n 1 inp
clear
echo "
$(tput setaf 3)Введіть команду 'q' щоб відкрити меню з основними командами $(tput sgr0)"
case "$inp" in
1)
echo "Запуск віртуального LXDE робочого стола"
sudo /usr/bin/vncserver :0 -geometry 1600x1200 -depth 24
exit 1
;;
2)
echo "Запуск Midnight Commander"
sudo mc
exit 1
;;
3)
echo "Запуск консолі адміністратора"
sudo su -
exit 1
;;
*)
echo "Запуск консолі"
exit 1
;;
esac

else
# Local connection
echo -n "$(tput setab 4)$(tput bold ; tput setaf 2)Raspberry Pi меню загрузки - Host: [$hostname]$(tput el)
$(tput setaf 5)============================================$(tput el)
$(tput bold ; tput setaf 3)1) LXDE робочий стіл$(tput el)
2) XMBC медіа сервер$(tput el)
3) Ігровий емулятор$(tput el)
4) Консоль адміністратора$(tput el)
5) Консоль$(tput el)
$(tput setaf 5)============================================$(tput el)"

echo "
$(tput setab 0)$(tput bold ; tput setaf 7)У Вас є $wait секунд для вибору. Виберіть пункт (1,2,3,4,5) [2]: "
read -t $wait -n 1 inp
clear
echo "
$(tput setaf 3)Введіть команду 'q' щоб відкрити меню з основними командами $(tput sgr0)"
case "$inp" in
1)
echo "Запуск LXDE робочого стола"
/usr/bin/startx
exit 1
;;
3)
echo "Запуск ігрового емулятора"
sudo emulationstation
exit 1
;;
4)
echo "Запуск консолі адміністратора"
sudo su -
exit 1
;;
2)
echo "Запуск XBMC медіа сервера"
sudo traf
sudo /usr/lib/xbmc/xbmc.bin &
exit 1
;;
*)
echo "Запуск консолі"
exit 1
;;
esac

fi

###########################################################
# End of Script
###########################################################

Можемо перевірити що вийшло просто ввівши в консолі команду bootmenu. В цьому прикладі буде виведено п’ять пунктів меню для фізичного старту системи і чотири при підключенні через SSH. Далі скрипт чекатиме 25 секунд на натиснення клавіші, а по завершенню буде очищати екран і виводити текст привітання. В моєму прикладі це речення
“Введіть команду ‘q’ щоб відкрити меню з основними командами”.

Сподобалось? Поділися з друзями!

Позначки:,

Категорія: Інженерія. Автор: tarasius. Опубліковано 20 червня 2013р. в 16:33.

Прокоментуй!



Прокоментуй!


Залишити коментар