LINUX.ORG.RU
решено ФорумTalks

browser-based distro - на чём пилить?

 , , , ,


0

3

Итак, после длинных срачей на тему браузерных ос ваш покорный слуга, вдохновленный идеей товарища init_6 о dwbOS и осознающий плачевность ситуации с дистрами подобного типа (сейчас остались в живых только Chromium OS, с которого и пишу, и Webconverger, который хоть и на фаерфоксе, но куда более анально огороженный, ибо автор настолько хитрожоп, что даже настройки соединения заставляет хранить исключительно в облаке (!) и за бабло (!)), решил зопилить что-то подобное для легковесного вебкитного браузера, например, surf(+ пропатченный dmenu) или того же dwb(+, в принципе, тот же пропатченный dmenu).

Следовательно, возникают вопросы:

  • На чём лучше базироваться, дабы размер дистра не превышал гига, в крайнем случае двух? Лфс, генту и прочие source-based не предлагать - главный таргет есть загрузочная флэшка (т.е. должно грузиться на абсолютно разных конфигурациях), да и компилёж вебкита - занятие не из приятных. Пока что думаю над арчем, но в нём даже базовая система какая-то слишком жЫрная изначально. Alpine Linux - в принципе, вариант (всё на μClibc), но там шаг влево/вправо от существующих пакетов - амбец.
  • Что использовать в качестве менеджера сетевых соединений (главным образом WiFi и главным образом WPA2)? Поскольку упор на легковесность, всякие networkManager тащить не хочется.
  • Как обеспечить быструю загрузку с флэшки, если хочется еще и сжатие (squashfs)?

Ответ на: комментарий от intelfx

Хотя стоп, а тебе нужно именно менять список раскладок после запуска иксов? Иначе один раз через localectl задаёшь список раскладок вместе с grp:ctrl_shift_toggle, а в иксах переключаешься через Ctrl+Shift.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Мне нужно именно давать возможность юзеру менять список раскладок после запуска иксов, а иначе, говорю же, воспользовался бы проверенным способом а-ля setxkbmap (ты учти, что это всё до следующей перезагрузки, ибо для лайв-носителя предназначается).

border-radius
() автор топика
Ответ на: комментарий от border-radius

Быстрым гуглежом я такой тулзы не нашёл (чтобы DE-agnostic).

Предлагаю написать скрипт, который будет выводить занумерованный список раскладок, предлагать пользователю ввести номера тех, что он хочет, и скармливать результат setxkbmap'у. А сам скрипт запускать в эмуляторе терминала по хоткею или сразу после старта иксов.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Я придумал, как запускать сам скрипт, но вот только хотел похвастаться, как я адово встроил dwb в корневое окно через флаг --embed, как выяснил, что нихрена оно не встроилось. Интересно, как ещё можно поменять геометрию без WM, если оказалось, что dwb, сволочь эдакая, и -geometry не понимает?

border-radius
() автор топика
Ответ на: комментарий от intelfx

xdotool меняет геометрию через EWMH, так что не катит, но я нашел другой способ (менять свойства default-width и default-height перед запуском dwb). Короче, свистну, как допилю.

border-radius
() автор топика

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

Гиг? Два?! Да любой!

www.linux.org.ru/wiki/en/Выбор_дистрибутива

Что использовать в качестве менеджера сетевых соединений

Network Manager. Как бы прекрасны не казались альтернативы искушенным пользователям, неискушенным от них приходит трындец мозга.

Как обеспечить быструю загрузку с флэшки, если хочется еще и сжатие (squashfs)?

Богомерзкий systemd впилить, а сжатие наоборот, перехотеть.

t184256 ★★★★★
()
Ответ на: комментарий от border-radius

Полистал тред.

НЕНАВИСТЬ к говнокодерам, использующим знаковый тип для размера файла!

Ну ты и жирный. Раз совсем ничего не можешь, возьми Debian Live и замути свой вариант. На CD уложишься. Характерные размеры см отри тут http://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/

Если и это не поможет, то возьми флешку на два гига и честно в лоб поставь на нее, например, Debian без recommended пакетов. Проще уже некуда.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Вот именно что полистал. Я тут уже dwb в человеческий вид привожу, и на данный момент задача - интерфейс к менеджеру соединений и интерфейс удобной смены набора раскладок. Надо будет пилить юзерскрипт для dwb или вообще вебморду - запилю.

border-radius
() автор топика
Ответ на: комментарий от MLP_Fan

А там этой фичи нету, есть какое-то расширение вроде. Но здесь это и неактуально (ориентировано на лайв ведь).

border-radius
() автор топика
Ответ на: комментарий от border-radius

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

MLP_Fan ★★
()
Ответ на: комментарий от MLP_Fan

Нет, немного не те задачи, но, возможно, прикручу установку влоб, подобную той, что у webconverger. Либо экспортируемый конфиг сделаю.

border-radius
() автор топика
Ответ на: комментарий от t184256

Раз совсем ничего не можешь, возьми Debian Live и замути свой вариант.

Дебиан-лайвы как были редкостными тормозами 5 лет назад (один дистр тогда на нём пилил), так и сейчас остались (скачай последний GParted Live или даже тот же Webconverger и убедись).

border-radius
() автор топика
Ответ на: комментарий от border-radius

Хотя установка не нужна, на арче можно просто взять список пакетов и скопировать домашнюю директорию.

MLP_Fan ★★
()
Ответ на: комментарий от MLP_Fan

Для допиленного варианта будет выложен готовый archiso-профиль, из которого можно будет собрать этот образ.

border-radius
() автор топика
Ответ на: комментарий от border-radius

или вообще вебморду

А кстати да, запили веб-интерфейс на примитивном http-сервере и bash'е =) Весело будет.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

YAHOO! Перемога. Помещаем в root-image/etc/skel/.config/dwb все конфиги из штатной установки dwb, но потом в root-image/etc/skel/.config/dwb/settings находим строчки default-width и default-height и удаляем нафиг, и в таком виде оставляем в скелетоне. После чего пилим в root-image/etc/skel/.xinitrc заполнение этих свойств исходя из реального размера корневого окна иксов:

xsetroot -cursor_name left_ptr &
ROOTSZ=$(xwininfo -root|grep geometry|grep -Po \\d+x\\d+)
ROOTW=$(echo $ROOTSZ|cut -d x -f 1)
ROOTH=$(echo $ROOTSZ|cut -d x -f 2)
SETDIR=~/.config/dwb
SETFILE=$SETDIR/settings
echo "default-width=$ROOTW">>$SETFILE
echo "default-height=$ROOTH">>$SETFILE
while true;do dwb dwb:bookmarks;done
Вот так вот можно запускать dwb безо всяких оконных менеджеров.

border-radius
() автор топика
Ответ на: комментарий от intelfx

Вебморда будет на HTML5+CSS3 (плюс, учитывая исключительный таргетинг на вебкит, может, с какими-то чисто вебкитными плюшками а-ля кастомный скроллбар на чистом CSS), а взаимодействие с системой - ну да, будет простенький cgi-сервак для запуска команд и возврата их stdout, в остальном логика будет на JS.

border-radius
() автор топика
Ответ на: комментарий от intelfx

Кстати, серверную часть уже запилил. Поскольку в арче ГНУсный неткат, т.е. ключ -e присутствует, безо всяких извращений получился сервак в 15 строчек на баше, который мало того что отдает как text/plain результаты команд, так ещё и разрешает запросы исключительно с локалхоста.

border-radius
() автор топика
Ответ на: комментарий от border-radius

Минуточку. Ты вместо http-сервера заюзал netcat? =) Абсолютный приз на контесте элегантных извращений.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

И где здесь извращение?

#!/bin/bash
urldecode() {
    local data=${1//+/ }
    printf '%b' "${data//%/\\x}"
}
xserv() {
    read REQ ENCODEDCMD PROTO
    CMD=$(urldecode ${ENCODEDCMD:1})
    OUT=$($CMD 2>&1)
    echo -e "HTTP/1.1 200 OK\nContent-Type:text/plain;charset=utf-8\nContent-Length:${#OUT}\n\n$OUT"
    exec 1>&-
}
[ $2 ] && xserv
SCRCMD="$0 $1 1"
nc -l -p $1 -e "$SCRCMD" -n 127.0.0.1

border-radius
() автор топика
Ответ на: комментарий от border-radius

Вот с другими версиями нетката (особенно с бизибоксовой) было бы извращение...

border-radius
() автор топика
Ответ на: комментарий от border-radius

Как минимум в том, что один и тот же скрипт и запускает неткат, и используется как коллбэк =)

Нет, ну просто... эээ... HTTP-«сервер» на баше — это необычно.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Ну так а зачем для узкоспециального решения (однопользовательский однопоточный запускатель команд, который будет запускаться только из вебморды с настройками и потому никогда не будет запущен параллельно) городить огород из левых серваков?

border-radius
() автор топика
Ответ на: комментарий от intelfx

Если бы у ГНУсного нетката был ещё флаг, делающий persistent connection (как у nc.traditional), вообще б ему цены не было. Тогда, в принципе, и параллелизм бы работал, и вот этого коллбэка бы не было. А так лучше так, чем два скрипта, один из которых while true.

border-radius
() автор топика
Ответ на: комментарий от UnnamedPB

Deepin powers millions of desktop PCs and laptops around the world.
millions

Да ну прям таки и миллионы? На скринах бубунта какая-то с Mac4Lin темой. Не, это мимо тазика. Имеются в виду именно браузерные ОС, где браузер или его движок являются оболочкой. Таких в живых осталось только двое: Chrome/Chromium OS и Webconverger. Да, были xPUD, BrowserLinux501 и т.п., но все загнулись, окромя тех двоих.

border-radius
() автор топика
Ответ на: комментарий от UnnamedPB

И да, Ни шиша не понимаю в китайском, но Ctrl+F на этой странице по слову ubuntu подтверждает мои слова. Этот deepin - самый настоящий болгенос.

border-radius
() автор топика
Ответ на: комментарий от intelfx

Короче, вебморды (по крайней мере, изначально планируемой) не будет. Системные вещи привяжу через dwb-шные юзерскрипты (т.к. узнал, что там есть system.spawn). Но будет справочная страничка со всеми командами, привязаными поверх dwb. Почему такое решение? Быстрее реализовать и шустрее будет работать. И ещё более KIvSS, да.

border-radius
() автор топика
Ответ на: комментарий от border-radius

Ну и норм.

А оно запускаться будет в отдельном терминале или вывод как-то отображается прямо в dwb?

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Нет, никаких отдельных терминалов. Команды, требующие какого-то вывода, попробую перенаправить в dwb-шный статусбар. Короче, всё сурово, поэтому кодовое имя - Asgard.

border-radius
() автор топика
Ответ на: комментарий от intelfx

В итоге самопальные скрипты на базе ip, iw и wpa_suplucant. Короче, задумка такая (пока что только DHCP) - сделать в dwb такие команды:

  • connect_wired - коннект Ethernet
  • connect_open <SSID> - коннект к открытой точке
  • connect_wep <SSID> <key> - коннект к точке на WEP
  • connect_wpa <SSID> <passphrase> - коннект к точке на WPA/WPA2-PSK через wpa_supplicant
border-radius
() автор топика
Ответ на: комментарий от border-radius

А конфиг для supplicant'а будешь сам генерить? Велосипедненько.

С таким «пользовательским интерфейсом» советую взять netctl и просто генерить для него профили. Тогда количество твоего кода сведётся к минимуму — файл профиля имеет такой вид:

Description='autogenerated'
Interface=<interface>
Connection=ethernet|wireless
Security=none|wpa|wep
Key=<passphrase>
ESSID=<SSID>
IP=dhcp

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Кстати, сам netctl — это набор скриптов на баше, поэтому если всё-таки будешь велосипедить, хотя бы реализацию возьми оттуда.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Хм. Можно ссылку, где подробнее об этом почитать? А то везде, где netctl упоминают, одно только лядское wifi-menu упоминается. В принципе, netctl я из арча не выпиливал.

Зы. Ну а для суппликанта есть способ запускать оный без конфига, это не проблема, в принципе.

border-radius
() автор топика
Ответ на: комментарий от border-radius
  • man 1 netctl
  • man 5 netctl.profile
  • vim /bin/netctl :)

Вообще без конфига? Или речь о том, что его можно в рантайме догенеривать по кускам и скармливать через wpa_cli?

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от border-radius

Ну и да, тогда синтаксис команды можно будет изменить на ещё более простой и свести все 4 варианта в один, типа connect ethernet или connect wireless wpa OloloPoint OloloPassword, а сетевой интерфейс будет подставляться автоматически, ибо с этим новым наименованием чёрт голову сломит.

border-radius
() автор топика
Ответ на: комментарий от border-radius

Имя интерфейса таки да, можно автоматически определять

while read iface; do
    if [[ -e "$iface/wireless" ]]; then iface_is_wireless "${iface##*/}";
    else iface_is_wired "${iface##*/}";
    fi
done < <(find /sys/class/net -mindepth 1 -maxdepth 1 -not -iname lo)

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: комментарий от border-radius

А, понял. Забыл, что есть тулза для автогенерации по SSID и ключу.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

А зачем так сложно? Хотя всё равно спасибо. Пока я для беспроводного так навелосипедил:

iw dev|grep Interface|grep -Po [^\\s]+|grep -v Interface

border-radius
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.