Я лично предпочитаю view
для статического содержания или tail -f
для динамического контента.
Это не отвечает на Ваш вопрос, все же. Существует высказывание, "почему использование больше, если у Вас есть меньше" ;-)
Но существуют случаи, где я предпочитаю кошку меньше: Я обычно работаю с X11-окнами. Эти окна имеют буфер прокрутки, который может быть установлен на некоторую сотню строк.
Выполнение a cat
для - скажем, 200 строк и затем использование мыши с полосой прокрутки более удобно для меня, чем использование less
в этих случаях.
Много дистрибутивов имеют некоторое средство для минимальной установки; по существу, где Вы вручную выбираете только те пакеты, которые Вы явно хотите установить. Debian имеет эту способность и был бы лучшим выбором, в Вашей ситуации, чем другой очевидный минимальный соперник, Дуга Linux.
Состояние выпуска прокрутки дуги может обеспечить уровень продолжающейся сложности, которой Вы хотите сторониться. Debian обеспечил бы простую, минимальную основу, которую Вы ищете плюс устойчивость предложения. Существует сообщение в блоге при использовании Debian как киоск, который может предложить некоторые полезные подсказки.
Для браузера, поскольку предлагает beav_35, Uzbl является хорошим выбором. Моей рекомендацией был бы Vimprobable, браузер WebKit, который scriptable, управляемая клавиатура и может управляться эффективно по SSH.
Как менеджер окон, я рекомендовал бы dwm: меньше чем в 2 000 SLOC это чрезвычайно легко и может быть легко настроено для установки типа киоска.
В первую очередь, Вы не могли бы хотеть изобретать велосипед... Существует несколько сфокусированных на киоске дистрибутивов. Один из тех мог бы сохранить Вас большая работа.
Во-вторых, если Вы знакомы с, Запускают на Fedora и RHEL (или CentOS или Научный Linux), можно использовать инструменты Fedora для создания собственного вращения из любого из тех дистрибутивов. Документация немного рассеивается, но запустите здесь.
Запустите с минимального дистрибутива, такого как Дуга Linux, затем установите пакеты, в которых Вы нуждаетесь. Поскольку простой веб-браузер пробует Uzbl.
Это - симпатичный включенный вопрос, и так как Ваш проект не является совершенно четким, некоторые из этих предложений могут быть вне метки, но считать их вещами оценить.
Вам, возможно, не понадобится веб-браузер на никогда компьютере, который является частью массива дисплея. При попытке показать одну единственную страницу через многие экраны, возможности - Вы, собираются хотеть использовать некоторую массовую технологию дисплея. Существует несколько вариантов Xorg, которые специализируются на генерации одного большого дисплея из видеоустройств на нескольких машинах.
Даже при использовании отдельных X-серверов на каждой машине можно использовать X-передачу для отправки данных дисплея из одного или нескольких других компьютеров, таким образом, браузеры все еще не должны были бы работать локально.
Вы захотите или не использовать менеджер окон вообще и спецификации геометрии использования, чтобы запустить Ваш полный экран приложения или использовать настраиваемую мозаику или менеджер окон платформы (такой как awesome
) управлять окнами на каждых X дисплеях. Они помогают отсортировать и управлять полноэкранными окнами и очень scriptable.
Что касается браузера, я думаю uzbl
вероятно четкий выбор.
Это могло бы быть хорошим приложением для сетевой начальной загрузки. Можно установить сервер с ядром нетбука, доступным через TFTP и файловую систему, доступную через nfs. Все Ваши клиенты должны сделать, использовать netboot способный NIC, чтобы связаться с этим сервером, загрузить их ядро и пойти. Никакой жесткий диск не включен! И легкое обслуживание. Все машины могут потенциально загрузить то же изображение.
Ваш "дистрибутив" должен, вероятно, состоять из двух вещей. 1) Набор пакета и 2) ряд конфигурационных файлов. Набор пакета является списком пакетов, которые должны быть установлены. Это может обычно собираться в текстовом файле, и затем можно использовать диспетчеры пакетов большей части дистрибутива для установки этого списка пакетов к цели (или жесткий диск или каталог, который будет точкой монтирования nfs). Конфигурационные файлы должны, вероятно, быть удержаны git
или другая система управления исходным кодом и содержит несколько сценариев и независимо от того, что модификации конфигурации должны быть сделаны к основной системе, установленной с набором пакета. Создание новой системы затем становится:
package_manager --install-distro --package-set=/path/packagelist.txt --target=/path
cd /target/path
git clone /path/to/repo
(или иначе контроль Ваш код конфигурации к системному корню)Какой дистрибутив Вы используете, поскольку основа должна зависеть от того, чем Вы являетесь самыми довольными. Я использовал бы PLD-Linux для меня, но вероятно рекомендовал бы ArchLinux как подобная, но лучшая зарегистрированная система для новичка работать с. Нет никакой причины Debian, Fedora, или хинду не работал бы на это.
dwm
или awesome
. Как я могу сказать менеджеру окон запускать приложение без строки заголовка в полноэкранном режиме?
– Naftuli Kay
01.08.2011, 21:08
apt-get
или aptitude
на Debian.
– Naftuli Kay
01.08.2011, 21:11
Я записал немного сценария удара, после того как это берет Дугу Linux ISO и генерирует новый ISO с измененным корневым изображением, которое делает полностью автоматизированную установку. Это включает разделение, а также установку и конфигурирование системы с Xorg, FVWM и Хромом. Установленная система войдет в систему автоматически и запустит Хром. Просто поместите новый ISO на карту флэш-памяти с интерфейсом USB и откиньтесь назад.;-)
Отказ от ответственности: сценарий предоставлен как есть, никакая данная гарантия. Я не использовал его в некоторое время, таким образом, этому, возможно, понадобилась бы тонкая настройка здесь или там. Измените по мере необходимости.
#!/bin/bash
# Helpful pages:
#
# * [ArchWiki topic][1] that explains the options of an AIF configuration
# file.
#
# * [Status of automated installation][2], a topic in the Arch Linux Forums
# that contains the original basic install script by *mhertz*.
#
# [1]: https://wiki.archlinux.org/index.php/AIF_Configuration_File
# [2]: https://bbs.archlinux.org/viewtopic.php?id=111925
TMP_DIR=/tmp/arch-install
# Read command line parameters for input and output ISO files.
if [ -z "$1" ]; then
echo 'No input file specified, aborting.'
exit 1
elif [ ! -f "$1" ]; then
echo 'Input file "'$INPUT_ISO'" not found, aborting.'
exit 1
elif [ -z "$2" ]; then
echo 'No output file specified, aborting.'
exit 1
elif [ -f "$2" ]; then
echo 'Output file "'$OUTPUT_ISO'" already exists, aborting.'
exit 1
fi
# Determine full paths to input and output ISO files.
INPUT_ISO=$(readlink -f "$1")
OUTPUT_ISO=$(readlink -f "$2")
# Set some variables for convenience.
SOURCE_DIR=$TMP_DIR/source
DEST_DIR=$TMP_DIR/dest
ROOT_DIR=$TMP_DIR/squashfs-root
BOOT_CFG=$DEST_DIR/boot/isolinux/isolinux.cfg
# Extract ISO image and root image.
mkdir -p $SOURCE_DIR
mount -o loop "$INPUT_ISO" $SOURCE_DIR
cp -a $SOURCE_DIR $DEST_DIR
umount $SOURCE_DIR
rmdir $SOURCE_DIR
unsquashfs -d $ROOT_DIR $DEST_DIR/root-image.sqfs
rm $DEST_DIR/root-image.sqfs
# Modify the root image as needed.
cat >> $ROOT_DIR/etc/aif.conf <<EOF
SOURCE=cd
FILE_URL=file:///src/core/pkg
SYNC_URL=http://ftp.tu-chemnitz.de/pub/linux/archlinux/\$repo/os/\$arch
HARDWARECLOCK=UpTC
TIMEZONE=Europe/Vienna
RUNTIME_REPOSITORIES=
RUNTIME_PACKAGES=
TARGET_GROUPS=base
TARGET_PACKAGES_EXCLUDE=
TARGET_PACKAGES='openssh xorg xcursor-vanilla-dmz-aa'
worker_runtime_network () {
dhcpcd eth0
}
worker_configure_system () {
prefill_configs
sed -i '/^HOSTNAME/ s/"myhost"/"arch"/' \$var_TARGET_DIR/etc/rc.conf
sed -i '/^password/ s/pam_permit\.so/pam_unix.so md5 shadow/' \$var_TARGET_DIR/etc/pam.d/chpasswd
sed -i '\|Server = http://ftp\.tu-chemnitz\.de/| s/^#//' \$var_TARGET_DIR/etc/pacman.d/mirrorlist
sed -i '/id:3:initdefault:/ s/^/#/' \$var_TARGET_DIR/etc/inittab
sed -i '/id:5:initdefault:/ s/^#//' \$var_TARGET_DIR/etc/inittab
sed -i '\|x:5:respawn:/usr/bin/xdm| s/^/#/' \$var_TARGET_DIR/etc/inittab
echo "x:5:respawn:/bin/su -l -c '/usr/bin/startx </dev/null >/dev/null 2>&1' myuser" >> \$var_TARGET_DIR/etc/inittab
sed -i 's/^timeout .*$/timeout 0/' \$var_TARGET_DIR/boot/grub/menu.lst
cp /etc/rc.local.firstboot \$var_TARGET_DIR/etc/rc.local
}
# Mandatory variables.
GRUB_DEVICE=/dev/sda
PARTITIONS='/dev/sda 20:ext2:+ 512:swap 2500:xfs *:xfs'
BLOCKDATA='/dev/sda1 raw no_label ext2;yes;/boot;target;no_opts;no_label;no_params
/dev/sda2 raw no_label swap;yes;no_mountpoint;target;no_opts;no_label;no_params
/dev/sda3 raw no_label xfs;yes;/;target;no_opts;no_label;no_params
/dev/sda4 raw no_label xfs;yes;/home;target;no_opts;no_label;no_params'
EOF
cat >> $ROOT_DIR/etc/rc.local <<EOF
aif -p automatic -c /etc/aif.conf
reboot
EOF
cat >> $ROOT_DIR/etc/rc.local.firstboot <<EOF
echo root:rootpassword | chpasswd
useradd -m myuser
echo myuser:myuser | chpasswd
cat >> /home/myuser/.xinitrc <<EOT
#!/bin/sh
exec fvwm2
EOT
cat >> /home/myuser/.Xdefaults <<EOT
Xcursor.theme: Vanilla-DMZ-AA
EOT
mkdir -p /home/myuser/.fvwm
cat >> /home/myuser/.fvwm/config <<EOT
DeskTopSize 1x1
DesktopName 0 Main
DestroyFunc StartFunction
AddToFunc StartFunction
+ I Test (Init) Exec exec xsetroot -solid '#303030'
+ I Test (Init) Exec exec chromium 'http://www.stackoverflow.com'
DestroyMenu RootMenu
AddToMenu RootMenu "Menu" Title
+ "Terminal" Exec exec xterm
+ "Browser" Exec exec chromium 'https://www.stackoverflow.com'
+ "" Nop
+ "Log off" Quit
+ "Reboot" Exec exec sudo /sbin/reboot
+ "Shutdown" Exec exec sudo /sbin/halt
OpaqueMoveSize unlimited
Style * ClickToFocus, ResizeOpaque
Style chromium !Title, !Border, !Handles
CursorStyle root top_left_arrow
CursorStyle stroke hand2
IgnoreModifiers L25
Key Help R A -
Key F1 R A -
Key Tab A M -
Key Escape A MC -
Mouse 1 R A -
Mouse 1 T A Move
Mouse 1 FS A Resize
Mouse 1 I A Iconify Off
Mouse 2 FST A -
Mouse 3 R A Menu RootMenu Nop
EOT
mkdir -p /home/myuser/.config/chromium/Default
touch /home/myuser/.config/chromium/First\ Run
cat >> /home/myuser/.config/chromium/Default/Preferences <<EOT
{
"alternate_error_pages": {
"enabled": false
},
"autofill": {
"enabled": false
},
"browser": {
"custom_chrome_frame": true,
"enable_spellchecking": false
},
"default_search_provider": {
"enabled": true,
"encodings": "UTF-8",
"icon_url": "about:blank",
"id": "2",
"instant_url": "",
"keyword": "google.com",
"name": "Google",
"prepopulate_id": "1",
"search_url": "{google:baseURL}search?ie={inputEncoding}&q={searchTerms}",
"suggest_url": ""
},
"devtools": {
"disabled": true
},
"dns_prefetching": {
"enabled": false
},
"download": {
"directory_upgrade": true
},
"extensions": {
"chrome_url_overrides": {
"bookmarks": [ "chrome-extension://eemcgdkfndhakfknompkggombfjjjeno/main.html" ]
}
},
"geolocation": {
"default_content_setting": 2
},
"google": {
"services": {
"username": ""
}
},
"homepage": "https://www.stackoverflow.com",
"homepage_is_newtabpage": false,
"intl": {
"accept_languages": "en",
"charset_default": "ISO-8859-1"
},
"ntp": {
"pref_version": 3
},
"profile": {
"clear_site_data_on_exit": true,
"content_settings": {
"pref_version": 1
},
"default_content_settings": {
"plugins": 1
},
"exited_cleanly": true,
"notifications_default_content_setting": 2,
"password_manager_enabled": false
},
"safebrowsing": {
"enabled": false
},
"search": {
"suggest_enabled": false
},
"tabs": {
"use_vertical_tabs": false
},
"translate": {
"enabled": false
}
}
EOT
chown -R myuser:myuser /home/myuser
pacman -Sy
pacman -S --noconfirm pacman
pacman -S --noconfirm fvwm-devel chromium sudo
echo 'myuser arch=NOPASSWD: /sbin/halt,/sbin/reboot' > /etc/sudoers.d/start_stop
chmod 0440 /etc/sudoers.d/start_stop
rm /etc/rc.local
EOF
# Create the new root image.
mksquashfs $TMP_DIR/squashfs-root $TMP_DIR/dest/root-image.sqfs
rm -rf $TMP_DIR/squashfs-root
# Configure the boot loader.
sed -i 's/TIMEOUT 3000/TIMEOUT 100/' $BOOT_CFG
sed -i '/APPEND hd0 0/d' $BOOT_CFG
sed -i 's/archisolabel=[^ ]*/archisolabel=ARCH/' $BOOT_CFG
# Create the new ISO image.
genisoimage -l -R -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table -V ARCH \
-o "$OUTPUT_ISO" $DEST_DIR
rm -rf $TMP_DIR
isohybrid "$OUTPUT_ISO"
Для системы как это я рекомендовал бы Щенка.
В то время как можно создать Вас дистрибутив с помощью любой версии Linux, Щенок делает очень легким создать пользовательские загружаемые образы, разработан, чтобы быть компактным и имеет большую поддержку файловой системы наложения.
Я должен просто смочь к dd жесткий диск
Нет - я повторно управлял бы созданием загружаемого образа, который можно разумно поддержать - подход, который Вы предлагаете, возвратится и укусит Вас.
Несколько человек упомянули uzbl, и я соглашаюсь, что это - хороший выбор - но Вы могли бы найти luakit еще лучше.
Как Caleb уже упомянул, Вам действительно не нужен никакой менеджер окон. Вот сценарий в качестве примера, который я создал для выполнения сервера Xorg WM-less с максимизируемым luakit браузером:
#!/bin/sh
XDCMD="xdotool search --class luakit windowsize %3 100% 100%"
while [ 1 ]
do
( sleep 0.5; $XDCMD || sleep 0.2 && $XDCMD || sleep 5 && $XDCMD ) &
/usr/bin/luakit $@
done
Это использует xdotool для максимизации окна сразу после того, как luakit запустился. Возможно, существует лучшее решение этого хотя...
Для основы такой системы я определенно рекомендовал бы хинду. Это - то, не только потому, что я знаю это лучше всего ;), но также и потому что это использует довольно уникальный подход глобального управления опциями времени изготовления всего установленного программного обеспечения. Я имею в виду флаги ИСПОЛЬЗОВАНИЯ. Используя тех, Вы определяете набор функций/библиотек/стандартов, которые используются всеми программами, которые поддерживают их - так, например, если Вы хотите, чтобы Ваши программы использовали ALSA и не были нужны в дополнительных аудио бэкендах как esd, разъем или pulseaudio, Вы помещаете alsa -jack -esd -pulseaudio
среди Ваших флагов ИСПОЛЬЗОВАНИЯ. После этого каждая часть программного обеспечения, которое Вы создаете, который может использовать дополнительные аудио бэкенды кроме ALSA, будет создана без поддержки тех. Так как это происходит на уровне конфигурации/сборки, Вы заканчиваете со значительно более тонким программным обеспечением. Таким образом, это - философия создания (при уважении всех зависимостей) вместо того, чтобы разделить вниз (который может закончить тем, что был багги и очень трудно поддержал).
Я упомяну это, потому что я удивлен, что никто больше не имеет.
Linux с нуля является книгой (PDF), который обходит Вас посредством создания Вашего собственного дистрибутива Linux. Это могло бы быть излишество для того, что Вы пытаетесь выполнить (на самом деле, это видит, поскольку у Вас уже есть инструменты, Вам нужно), но это может оказаться неоценимым инструментом в понимании, как работает система. Это действительно не, что трудно и нет никакого включенного программирования.
Buildroot 2016.05 + Midori
Buildroot - отличный инструмент для сборки минимальных дистрибутивов:
.config
Midori минималистичного браузера на основе WebKitа Buildroot имеет встроенный пакет Midori.
.config
используемый файл: https://github.com/cirosantilli/buildroot-configs/blob/32d1174e0bf8d00b92323eebe8901af3f8c389d3/2016.05/qemu_x86_64_x11_midori_defconfig
How to generate that config file:
make menuconfig
mesa3d
Чистим сборку, потому что мы изменили toolchain и собираем снова:
rm -rf output
make BR2_JLEVEL=$(nproc)
Ждем несколько часов. Затем как обычно:
qemu-system-x86_64 \
-enable-kvm \
-M pc \
-m 512 \
-kernel output/images/bzImage \
-drive file=output/images/rootfs.ext2,if=virtio,format=raw \
-append root=/dev/vda \
-net nic,model=virtio \
-net user
И изнутри QEMU:
root
startx
и из X11 GUI щелкаем окно xterm
и запускаем:
midori
Результат:
Размер изображения: 220M! Сравните это с 28M голой системы X11 Как установить X11 на мою собственную систему Linux Buildroot? - Unix & Linux Stack Exchange . Вероятно, из-за зависимостей WebKit + GTK3.
Проверено на хосте Ubuntu 16.04, QEMU 2.5.0.
NetSurf
Написан на SDL, который поддерживает fbdev: http://www.netsurf-browser.org/about/screenshots/#framebuffer
fbdev - это интерфейс нижнего уровня, предлагаемый модулем ядра Linux, который не проходит через X11 (я думаю, X11 может опционально использовать его в качестве бэкенда). По сути, вы просто записываете данные в память, и они отображаются на экране.
Чтобы использовать fbdev в Ubuntu, вы должны быть на TTY (например, Ctrl + Alt + F1).
Так что вы, вероятно, сможете обойтись без изображения гораздо меньшего размера, чем у Midori.
В Buildroot 2016.05 есть пакет netsurf-buildsystem
, который должен это обеспечить, но я не тестировал. Если кому-то удастся запустить его, пожалуйста, добавьте ссылку на .config, скриншот и размер изображения.