How PulseAudio works.

Image via Wikipedia

Днес най- накрая след една камара време реших да си купя още кабели за да си закача 5.1 аудио системата ми пълноценно. Досега я ползвах със нормален стерео кабел и след това системата сама си правеше деление на аудио каналите. Което не е никак добре. Сега вече за всеки канал си има отделен кабел и звукът е доста по чист (естествено), по плътен а на филмите усещането е подобрено много кратно. Имаше няколко малки драми които се оправят относителни интуитивно. Основната драма беше, че звукът тръгна само в front колоните без буфер център или задните след като пренастроих звуковата схема на Gnome да е 5.1 . В повечето плеъри имам опция за настройка в alsa часта за колко канално да е аудиото но има програми в които отсъствува такава възможност като да речем adobe flash player. Първоначалната ми идея беше просто да пренастроя .asoundrc като задам параметри да дублира звукът по всички канали – решение с което не се гордея защото не го обмислих изобщо. Конфигурацията тривиална :

pcm.!default {
type plug
slave.pcm „surround51“
slave.channels 6
route_policy duplicate
}

С нея нещата си дойдоха на място докато не осъзнах че alsa може да обработва само по 1 процес и докато тои не приключи да я ползва друг не може. 😳  Неприятно но факт бях забравил времената в който слушаш или player или youtube и ако едното ти омръзне трябва да затвориш програмата, че да ползваш другата апликация. Което веднага ми подсказа къде е истинския корен на нещата – конфигурацията на pulseaudio сървъра. Pulseaudio е най грубо казано прокси сървър който обработва информацията между аудио хардуера и аудио софтуера който иска да го ползва. Система която с години се доказа много кратно. При нея конфигурацията се намира в /etc/pulse/daemon.conf. По подразбиране всичко е закоментирано с ; така че ако не сте праивли промени може направо смело да добавите следните редове накрая на файлът:

enable-lfe-remixing = yes

default-sample-rate = 48000
default-sample-channels = 6

Имената на опциите са очевидни задаваме стойноста на колко канално аудио ще сме малък тунинг на стандартния битрейт и разрешване на lfe ремиксирането.  След това остава да рестартирате alsa и pulseaudio с

sudo /etc/init.d/alsa-utils restart && pulseaudio -k

От тук нататък за мен остана само а се наслаждавам на вече по доброто аудио.

edit: .asoundrc трябва да е със съдържание за да нямате проблеми със skype и някой други апликации

pcm.pulse {type pulse }
ctl.pulse { type pulse }

Enhanced by Zemanta

За единия проект които водя в gitweb ме дразнеше, че няма оцветяване на кода в дървото. Лесен начин как да оцветите синтаксиса в tree частта на gitweb е като инсталирате пакета  highlight и добавите следния ред в /etc/gitweb.conf или където ви се намира конфигурационния файл на gitweb

$feature{‘highlight’}{‘default’} = [1];

За Debian пакета го има в пакетната система за другите дистрибуции не съм проверявал.

ps Има и алтернативен вариант като се правят промени по файловете на gitweb ама ми се стори безсмислено като има простичък вариант 🙂

Измина доста време от както писах за последно но съм ужасно зает с новата ми работа, все още не съм се устроил и не съм си пуснал Интернет на новото ми място. Отделно, че хостинга където се помещаваше малкия ми блог го сполетяха доста хардуерни неволи и имаше известен период в които не можеше да функционира поради невъзможността ми да имам физически достъп до машината. След дълго мислене взех решение да прехвърля блогчето ми на публичен web сървър, решение което изискваше много мислене и не особено лесно приемане. Все пак съм преди всичко системен администратор и това удря по гордостта ми много, но към момента нямам нито една подходяща машина на която да бъде хостнат сайта така, че преглъщам горчивия залък и продължавам напред. Като изключим този факт и факта че съм изключително лимитиран от възможност за манипулации по настройките на apache + php + mysql нещата не изглеждат чак толкова зле. Хората си правят редовни бекъпи имат си дизастър рековъри план имат си техническа помощ която може да помоля за помощ – както и се наложи за да импортират бекъпа на базата ми данни които е в скромния размер от около 1GB.  За сега има още няколко дребни настройки да се довършат но това ще е като имм нерви да се боря с тъпия cpanel 😆

Преди няколко дни попаднах на holynix. Това е дистрибуция подготвена за хакване на базата на някое Ubuntu с инсталирани apache + mysl + php и някаква страничка. Целта е да се експлоитнат стартираните апликации и услуги да се достигне до root права. Сега няма да описвам как се чупят услугите и апликациите а как се решава проблема с не стартираща се мрежа. При мен използвах virtualbox за да си стартирам holynix  v1. Пускам си аз имиджа и гледма за ново устройство в мрежата ми – реших да го направя като хората да не знам кое е IP-то за екплойтване, ама не намерих такова. Рестартирах и махнах тихото стартиране и видях, че по време на стартиране на мрежата реве, че няма /var/run/network/ifstate. Решението е елементарно трябва при стартиране на мрежата да се провери дали съществуват съответната директория и ако не да се зaдаде и същото за файлът. Това е тривиална операция в /etc/init.d/networking в началото на функцията start се добавят следните 2 реда


[ -d /var/run/network ] || mkdir /var/run/network
[ -f /var/run/network/ifstate ] || touch /var/run/network/ifstate

Това добре ясно е решението обаче нямаме парола за root потребителя 😀 Сега следва забавната част и първия ни hack 😉 За да се вземе root потребител в grub менюто трябва да направим малко магии. Трябва да натиснем esc бързо преди непосредствено стартиране на системата ще се покаже менюто. След това с Е влизаме в режим на редактиране на менюто в kernel частта накрая добавяме init=/bin/bash и променяме ro на rw за да може файловата система да ни е с права за писане при монтирането след като вземе root shell-a.

След това поправяме файлът за мрежовите интерфейси. Трябва да променим /etc/network/interfaces да се вдига eht1 и да взима по dhcp настройки за мрежата.  Защото по подразбиране търси eth0 а ние имаме ново устройство което ще се инициализира с eth1. Рестартирате и вече трябва да имато ново устройство в мрежата си.

ps Малка подсказка за да пробиете login частта в полето за паролата има sql injection 😉 Приятно хахорване

ps 2 При мен съм ползвал VirtualBox за визуализация в bridge mode за мрежата.

Enhanced by Zemanta

Около половин година след последния ми анонс по Dreambox monitoring ситестемата ми мога да анонсирам новата и вероятно някоя от последните си версии на Nuki. Версията беше готова още преди  2 месеца но къде от мързел къде заради дебъгване нещата се позабавиха с анонса. От няколко дни работи на 32 dreambox 500-s и общо взето резултатите са много добри. Промените са много – премахната е идиотската звисимост от Linux server на които да се прехвърлят логовете – вече е необходимо да имате apache + php, защото новата система за писане на логове е като се подава параметри към един php скрипт на сървъра. Отделно съм променил скрипта да работи и без сървърна част – ако имате малко сателитни приемници не е смислено да имате постоянно пуснат сървър от които да се взима инфото затова може да се нанесе хардкоднато в скрипта с 2 променливи информацията за CAM-а. Също така съм декларирал допълнителна променлива за debug – ако не искате няма да ви мята логове – отново малоумен пропуск в сравнение с преди 🙂 Леки поправики по кода бяха напревени, че приличаше като писан от полуграмотен олигофрен (не че несъм де). Остране ни бяха 2 критични грешки в кода водещи до прекратяване на работа на скрипта в някакъв случаен момент, отново олигофренски пропуски от моя страна. Общо взето писането не беше много просто трябваше да се помисли да се направи като хората, че busybox и ash не са най лесни неща за опитомяване. Тоя път мисля да спестя голямата тирада с кода и направо да обясня променливите коя за какво е и какви манипулации могат да се направят с нея (новите) 🙂


SERVER="192.168.100.1"
 STANDALONE="FALSE" #using like stand alone app no server side depends ; )
 HCAM1="" ## if starting like stand alone app give me CAM namezzz if HCAM1 is empty its means chanel is free
 HCAM2="" ## CAM2 name
 PORT="666" # port rockzzz : D : )))))))))))))))))
 IP=$(ifconfig eth0 | grep inet | awk '{print $2}' | sed -e 's@addr:@@')
 FILE='/tmp/debug'
 INFO='/tmp/info_file'
 NC=$(which nc)
 WGET=$(which wget)
 MAX_DAYS="10"
 TIMEOUT="600"
 MAX=70 #max cpu usage per process
DEBUGING="TRUE" #if u wanna script send debug information set DEBUGING to TRUE if SEVERLESS is set to true this var will be skiped
 NEWDBGSTYLE="TRUE" #debuging new style sending info to apache derectly, old style using nc

Така очевидно имената на променливити говорят сами за себе си достатъчно но все пак и аз да кажа някоя и друга умна дума.

STANDALONE е една от най важните променливи ако е сетната на TRUE няма да се правят обръщения към сървъра и няма да изисква вече зависимост от сървър ако я използвате трябва да сложите стойности и на следната HCAM1 (незнам защо съм я кръстил така не помня вече но няма и значение). Ако няма стоиност в нея а скритпа е самостоятелен скрипта приема че ще работи на некриптиран канал и няма прави проверка за декриптиращ модул, ако има ще провери според зададената стоиност. HCAM2 е незадължителна ако декодиращия ви модул използва само 1 процес да речем CCcam например.

DEBUGING втората интересна променлива ще ви прлюе информация или ще пази мълчание според зависи каква стойност сте забили. Авотматично преминава в тих режи ако STANDALONE е TRUE

NEWDBGSTYLE трата важна променлива. Тя определя как ще се прехвърлят логовете към сървъра. Ако е TRUE ще е по новия начин без идиостката зависимост от netcat. Ако все пак си държите на стария метод слагате FALSE. В общи линии това са нещата на които трябва да наблегнете но мисля, че промените въпреки че са кардинални ще останат една идея прозрачни заради зададените стойности по подразбиране 🙂

Определено вече съм много доволен как се получиха нещата – скрипта стана достатъчно гъвкав отпднаха идиотките зависимост на допълнителни файлове за функции както и вече отпдна и зависимост на nc мисля или пък нуждата от сървър и прочие не всеки ползва 30+ box-a че да има и сървър или пък може да има само някакъв домаше router. Все още има какво да се подобри но засега мисля да се въздържам от таквиа неща защото не е наложително 🙂

Файловете както обикновено се намират в директорията  а крипта за въвеждане на логовете може да свалите от тук

И по случай добрия скрипт едно ускорено парче за всички ускорители 😀

Enhanced by Zemanta