Продолжаю использовать 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
И там обнаружил, что доступна ещё одна запись: 'pin номер,номер,номер,...'. Больше никаких подробностей не было. Я снова заглянул в код, поэкспериментирвал и понял, что последовательность pin - это путь сигнала в обратном порядке (может быть, это мои фантазии, и я просто понял всё наоборот). Конкретно в моём случае, счастливой комбинацией стало:
echo 'pin 20,15,2' > /dev/audioctl
Вы можете сами сопоставить этот "путь" с содержимым audioctl.
А вернуть вывод звука на наушники проще: echo pin 26 > /dev/audioctl
В общем, наслаждаемся звуком: http://hugeping.tk/lib/uploads/9front-zuke.png
# 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 и просто копируем ссылку в чат. Это даже проще, чем telega в emacs. :)
"Из коробки" в 9front также имеется скрипт webpaste, которая заливает текст на pastebin-подобный сервис. Всё для людей!
За это время, я много пользовался mothra и привык к аскетичному интернету. И вы знаете, я не чувствую себя обделённым. :)
Кстати, в mothra нет закладок. Закладки для меня - обычный текст bookmarks.txt, в которой строка за строкой перечислены url. Я открываю файл в acme, нажимаю 2й кнопкой мыши на url и она открывается (с помощью plumber). KISS как он есть.
Ещё один забавный курьёз: бороздя интернет в mothra натолкнулся на сайт с научными новостями. Сайт мне чем-то понравился, я добавил его в bookmarks.txt. А потом, как-то находясь в Linux, открыл его в FireFox: https://nplus1.ru :) Знаете, лучше я пойду обратно в Plan9.
# Чтение epub
page не читает epub, но на самом деле, читает. :) Вы просто монтируете epub с помощью zipfs. Потом открываете xml с текстом с помощью page. Выглядит вполне прилично - логическое форматирование присутствует. А что ешё нужно?
# INSTEAD для Plan9
SDL1 на Plan9 не готов. Поэтому я просто собрал tiny варианты инстеда и метапарсера. На удивление -- вполне юзабельно и в духе минимализма Plan9.
http://hugeping.tk/lib/uploads/9front-instead-cat.png
Так что если что, добро пожаловать: https://github.com/gl00my/plan9hacks/tree/master/9instead
# Лирическое заключение
Почти каждый день после работы я с большим удовольствием запускаю свой eeepc с Plan9 и смотрю IT-новости, чатюсь с друзьями, читаю и отвечаю на почту, слушаю музыку, программирую, запускаю игры INSTEAD (в тексте) и собираюсь написать свою. Зачем?
Честно говоря, не знаю. Но я чувствую огромный терапевтический эффект. В чём тут дело? Система не напрягает, она успокаивает. Здесь всё сделано без оглядки на костыли прошлого, без оглядки на "фичи" и разбалованных пользователей. Без оглядки на требования маркетологов. Система проста и элегантна. И с точки зрения архитектуры, и с точки зрения использования. Такой вот ретро-пост-панк-юникс. Так что я точно знаю, что "работая" в этой ОС я _отдыхаю_. Замечательно, что современный браузер никогда не будет здесь! "Пошёл вон, Вавилон!"(c).
Возможно, это характерный признак нашего времени -- IT-специалисты-эскаписты, стремящиеся найди убежище от современных переусложнённых чудовищ?
Несклько дней назад мне пришлось разбираться с одной из подсистем ядра Linux. 3 или 4 дня я изучал хитрые приёмы синхронизации, в которых гонки были архитектурно предусмотрены, а равномерность нагрузки достигалась путём хитроумнейших хаков. В этом тоже есть своя "хакерская" красота. Но не могу себя обманывать, этот код у меня вызывает стресс. Код на грани возможного. Может быть, так и надо. (Я писал уже на похожую тему ii://kXDk7c9zuOEmsuY0nFZW/ ) Но облегчение, которое я испытал вечером, запустив acme... Оно было настолько реальным... :)