Plan 9: экстремальный KISS #3

by hugeping on 2020-11-11 13:25:57

Продолжаю использовать Plan9 (9front) на своём нетбуке.

Кросскомпиляция на go

Я писал, что собрать современный go на eeepc я не смог - не хватило памяти. Сегодня, внезапно осознав, что всё может быть гораздо проще, чем мне кажется, я набрал на ноутбуке с ArchLinux:

$ GOOS=plan9 GOARCH=amd64 go build 

И собрал проект на go, который прекрасно запустился на 9front! Отлично, получается Plan9 не выкинут из современного go и это радует! Можно просто кросс-компилировать нужный софт.

Доступ по drawterm

Обычно, я заливаю данные на eeepc через exportfs или по sshfs. Но иногда хочется зайти на машинку удалённо. Для этого в ArchLinux я поставил 9front-drawterm, а на 9front запускаю такой скрипт:

#!/bin/rc
auth/factotum -n
echo 'key proto=p9sk1 dom=$sysname user=glenda !password=password' >/mnt/factotum/ctl
aux/listen1 -t tcp!*!17019 /rc/bin/service/tcp17019 &

С ArchLinux:

9front-drawterm -h <ip address> -u glenda 

И получаем внешне что-то похожее на vnc. Чтобы запустить rio, наберите rio -i riostart. Перед этим можно ещё запустить webfs. Вообще, посмотрите на $home/lib/profile. Там есть ветвление между terminal/cpu. Когда вы заходите по drawterm, выполняется ветка cpu. Когда работаете на машинке в обычном режиме -- это terminal.

Звук HDA Intel

Звук у меня завёлся, но только в наушниках. Долгое время меня это не беспокоило, но потом стало интересно. Я думал, что игра с пинами должна помочь. Но к сожалению, никакой документации я не нашёл. В и��ходном коде я увидел, что можно делать что-то вроде echo 'pin 26' > /dev/audioctl. Мой /dev/audiostat был таким:

bufsize   1024 buffered      0
codec 0 pin 26 inpin 18
aout 2 1d
aout 3 1d
beep 4 f00000
beep 5 f00000
aout 6 211
beep 7 f00000
ain 8 10011b ← amix 35
ain 9 10011b ← asel 34
beep 10 f00000
amix 11 20010b ← pin 24, pin 25, pin 26, pin 27, pin 29
amix 12 20010b ← aout 2, amix 11
amix 13 20010b ← aout 3, amix 11
beep 14 f00000
amix 15 20010a ← aout 2, amix 11
beep 16 f00000
beep 17 f00000
pin 18 in fix int special micin ?
beep 19 f00000
pin 20 out fix int special speaker ? eapd ← amix 12, amix 13
beep 21 f00000
beep 22 f00000
pin 23 out nothing ext rear speaker black ← amix 15
pin 24 inout nothing ext rear speaker black ← amix 13
pin 25 in nothing ext rear speaker black
pin 26 inout jack ext rear hpout green ← amix 12, amix 13
pin 27 inout nothing ext rear speaker black ← amix 12, amix 13
beep 28 f00000
pin 29 in nothing ext N/A lineout purple
pin 30 out nothing ext rear speaker black ← aout 6
beep 31 f00000
beep 32 f00040
pin 33 out nothing ext rear speaker black ← amix 12, amix 13
asel 34 30010b ← pin 24, pin 25, pin 26, pin 27, pin 29, amix 11, pin 18
amix 35 20010b ← pin 24, pin 25, pin 26, pin 27, pin 29, amix 11
outpath aout 2 → amix 12 → pin 26
outamp aout 2
inpath pin 18 → asel 34 → ain 9
inamp ain 9

Я прошёлся по всем пинам, делая echo 'pin номер' > /dev/audioctl -- звука нет. Ну и я решил, что не судьба. Потом, случайно, натолкнулся на: https://pspodcasting.net/dan/blog/2019/plan9_desktop.html [1]

И там обнаружил, что доступна ещё одна запись: 'pin номер,номер,номер,...'. Больше никаких подробностей не было. Я снова заглянул в код, поэкспериментирвал и понял, что последовательность pin - это путь сигнала в обратном порядке (может быть, это мои фантазии, и я просто понял всё наоборот). Конкретно в моём случае, счастливой комбинацией стало:

echo 'pin 20,15,2' > /dev/audioctl

Вы можете сами сопоставить этот "путь" с содержимым audioctl.

А вернуть вывод звука на наушники проще: echo pin 26 > /dev/audioctl

В общем, наслаждаемся звуком: http://hugeping.tk/lib/uploads/9front-zuke.png [2]

telegram/discord

Я поднял на своей малинке bitlbee сервер. Собрал telegram-tdlib. В итоге, получилось из irc чатиться по работе в telegram. А также зависать в discord. Конечно, есть нюансы, но главное - работает! Детали описывать не буду, скучная рутина.

Зато интересный нюанс, отсутствие "нормального" браузера заставляет находить решения, которые часто оказываются более эффективными. Например, из irc клиента я хотел закачивать скриншоты и публиковать их в telegram чате. Сначала я испол��зовал sshfs на малинку, а потом написал такой скрипт:

#!/bin/rc
if(~ $#* 0)
        file=/fd/0
if not
        file=$1

hpost -m / -u http://curldu.mp 'File@'^$file

Заливаем файл на http://curldu.mp [3] и просто копируем ссылку в чат. Это даже проще, чем telega в emacs. :)

"Из коробки" в 9front также имеется скрипт webpaste, которая заливает текст на pastebin-подобный сервис. Всё для людей!

За это время, я много пользовался mothra и привык к аскетичному интернету. И вы знаете, я не чувствую себя обделённым. :)

Кстати, в mothra нет закладок. Закладки для меня - обычный текст bookmarks.txt, в которой строка за строкой перечислены url. Я открываю файл в acme, нажимаю 2й кнопкой мыши на url и она открывается (с помощью plumber). KISS как он есть.

Ещё один забавный курьёз: бороздя интернет в mothra натолкнулся на сайт с научными новостями. Сайт мне чем-то понравился, я добавил его в bookmarks.txt. А потом, как-то находясь в Linux, открыл его в FireFox: https://nplus1.ru [4] :) Знаете, лучше я пойду обратно в Plan9.

Чтение epub

page не читает epub, но на самом деле, читает. :) Вы просто монтируете epub с помощью zipfs. Потом открываете xml с текстом с помощью page. Выглядит вполне прилично - логическое форматирование присутствует. А что ешё нужно?

INSTEAD для Plan9

SDL1 на Plan9 не готов. Поэтому я просто собрал tiny варианты инстеда и метапарсера. На удивление -- вполне юзабельно и в духе минимализма Plan9.

http://hugeping.tk/lib/uploads/9front-instead-cat.png [5]

Так что если что, добро пожаловать: https://github.com/gl00my/plan9hacks/tree/master/9instead [6]

Лирическое заключение

Почти каждый день после работы я с большим удовольствием запускаю свой eeepc с Plan9 и смотрю IT-новости, чатюсь с друзьями, читаю и отвечаю на почту, слушаю музыку, программирую, запускаю игры INSTEAD (в тексте) и собираюсь написать свою. Зачем?

Честно говоря, не знаю. Но я чувствую огромный терапевтический эффект. В чём тут дело? Система не напрягает, она успокаивает. Здесь всё сделано без оглядки на костыли прошлого, без оглядки на "фичи" и разбалованных пользователей. Без оглядки на требования маркетологов. Система проста и элегантна. И с точки зрения архитектуры, и с точки зрения использования. Такой вот ретро-пост-панк-юникс. Так что я точно знаю, что "работая" в этой ОС я _отдыхаю_. Замечательно, что современный браузер никогда не будет здесь! "Пошёл вон, Вавилон!"(c).

Возможно, это характерный признак нашего времени -- IT-специалисты-эскаписты, стремящиеся найди убежище от современных переусложнённых чудовищ?

Несклько дней назад мне пришлось разбираться с одной из подсистем ядра Linux. 3 или 4 дня я изучал хитрые приёмы синхронизации, в которых гонки были архитектурно предусмотрены, а равномерность нагрузки достигалась путём хитроумнейших хаков. В этом тоже есть своя "хакерская" красота. Но не могу себя обманывать, этот код у меня вызывает стресс. Код на грани возможного. Может быть, так и надо. (Я писал уже на похожую тему ii://kXDk7c9zuOEmsuY0nFZW/ ) Но облегчение, которое я испытал вечером, запустив acme... Оно было настолько реальным... :)

https://pspodcasting.net/dan/blog/2019/plan9_desktop.html [1]

http://hugeping.tk/lib/uploads/9front-zuke.png [2]

http://curldu.mp [3]

https://nplus1.ru [4]

http://hugeping.tk/lib/uploads/9front-instead-cat.png [5]

https://github.com/gl00my/plan9hacks/tree/master/9instead [6]