viernes, 14 de marzo de 2014

PulseAudio en modo sistema (Arch Linux)

En mi caso, tengo una Raspberry Pi con un parlante corriendo MPD.
Para configurar PulseAudio en modo sistema, es necesario ejecutar los siguientes pasos como root:

1.- Instalar PulseAudio

pacman -Sy pulseaudio

2.- Darle permisos para utilizar DBus

vi /etc/dbus-1/system.d/pulseaudio.conf
<!DOCTYPE busconfig PUBLIC
 "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
     <policy user="pulse">
         <allow own="org.pulseaudio.Server"/>
         <allow send_destination="org.pulseaudio.Server"/>
         <allow receive_sender="org.pulseaudio.Server"/>
     </policy>
</busconfig>

3.- Crear usuario 'pulse'

useradd pulse

4.- Crear grupo 'pulse-access'

groupadd pulse-access

5.- Agregar el usuario 'pulse' al grupo 'audio'

usermod -a -G audio pulse

6.- Agregar al grupo 'pulse-access' todos los usuarios que utilizaran PulseAudio

usermod -a -G pulse-access <your_user>

7.- Cambiar el directorio 'home' del usuario 'pulse'

usermod --home /var/run/pulse pulse

8.- Cambiar la linea del archivo client.conf

vi /etc/pulse/client.conf
- ;autospawn = yes
+ autospawn = no

9.- Agregar PulseAudio como servicio dentro de Systemd

vi /usr/lib/systemd/system/pulseaudio.service
[Unit]
Description=PulseAudio Daemon
Documentation=man:pulseaudio(1)

[Service]
ExecStart=/usr/bin/pulseaudio --system --high-priority --disallow-exit --disable-shm --disallow-module-loading=1 --log-target=stderr --exit-idle-time=-1
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

10.- Refrescar la configuración del Systemd

systemctl --system daemon-reload

11.- Habilitarlo dentro de Systemd

systemctl enable pulseaudio

12.- Crear el home de pulseaudio

mkdir -p /var/run/pulse
chown -R pulse: /var/run/pulse

13.- Reiniciar el equipo

reboot

miércoles, 26 de febrero de 2014

Manejar el volumen de PulseAudio mediante CLI


Subir:
pactl set-sink-volume @DEFAULT_SINK@ -- +10%

Bajar:
pactl set-sink-volume @DEFAULT_SINK@ -- -10%

Mute:
pactl set-sink-mute @DEFAULT_SINK@ toggle

jueves, 7 de febrero de 2013

MPD + (Digitally Imported / Rock Radio / Jazz Radio / Radio Tunes / Classical Radio)

Actualizado: 14 de junio de 2016

La cuenta publica ya no funciona, por lo que he actualizado la información para reflejar solo lo relacionado a la cuenta premium. Además, corregí un pequeño bug que no permitía escribir la playlist del último canal procesado.


Ingresar al directorio donde están las playlist y ejecutar los siguientes sentencias:

SITE="di.fm"
QUALITY="public2"
export PREFIX="di_"
export KEY="<KEY>"

wget -q -O - http://listen.$SITE/$QUALITY | sed 's/},{/\n/g;s/$/\n/' | while read i; do (k=$(echo $i|sed 's/.*"key":"\([^"]\+\)".*/\1/'); echo $k; p=$(echo $i|sed 's/.*"playlist":"\([^"]\+\)".*/\1/'); wget -q -O - $p | grep -E '^File' | sed 's/.\+=\(.\+\)/\1/' | xargs -I{} echo "{}?$KEY" > $PREFIX$k.m3u); done


Posibles valores para:
    SITE:
    • di.fm (Digitally Imported)
    • rockradio.com (Rock Radio)
    • jazzradio.com (Jazz Radio)
    • radiotunes.com (Radio Tunes)
    • classicalradio.com (Classical Radio)

    QUALITY:
    • premium_low (premium40k)
    • premium_medium (premium64k)
    • premium (premium128k)
    • premium_high (premium256k)
    • [via Bitcrusher]



Enjoy!

miércoles, 23 de enero de 2013

Convertir videos en GNU/Linux con avconv para reproducir en el Hyundai Veloster

Para que los reproduzca el car:

avconv -i <input_file> -c:a libmp3lame -b:a 320k -ar 48000 -c:v mpeg4 -s 4cif -r 25 -b:v 1200k -vtag xvid <output_file>.avi

Espero que a alguien le sirva ;)

Update:
Le agregué el tag -> "-vtag xvid", para que quede marcado como XviD

Errores:
"Invalid pixel aspect ratio":
Se debe eliminar la configuración del tamaño del video ("-s 4cif")

"Unknown encoder 'libmp3lame'"
Instalar el paquete libavcodec-extra-53
(Ej: sudo apt-get install libavcodec-extra-53)

domingo, 5 de agosto de 2012

APT más rápido en los (dist-)upgrade

Este es otro tips que tengo para lograr descargar más rápido los paquetes cuando se hacen los (dist-)upgrade de, en mi caso, ubuntu.

Estos pasos sirven también cuando lo que se quiere es descargar solo los paquetes y hacer el (dist-)upgrade en otro momento (ojo, que cuando se quiera hacer el (dist-)upgrade puede que hayan paquetes nuevos y estos deberán ser descargados).

Los pasos serían los siguientes:

1.- Ganar privilegios


sudo -s


2.- Entrar al directorio de archivos descargados de APT


cd /var/cache/apt/archives


3.- Obtener el listado de archivos a descargar


apt-get -qq --print-uris upgrade > /tmp/files.txt


o


apt-get -qq --print-uris dist-upgrade > /tmp/files.txt


4.- Descargar los archivos (se empezara a colgar la máquina)


cat /tmp/files.txt | perl -n -e '/^([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)$/; print "wget -q -O \"$2\" $1 &\n"; system("wget -q -O \"$2\" $1 &");'


5.- Esperar a que terminen todos los 'wget'


watch 'ps -efa | grep wget'


6.- Revisar los MD5


cat /tmp/files.txt | perl -n -e '/^([^ ]+) ([^ ]+) ([^ ]+) MD5Sum:([^ ]+)\n$/; $n=$2; $t1=$4; $_=`md5sum $n`; /^([^ ]+)/; $t2=$1; if ($t1 ne $t2) { print "ERROR: $n\n"; } else { print "OK: $n\n"; }' | grep ERROR


7.- En caso de que falle alguno, volver a descargarlo...

8.- Eliminar el archivo temporal


rm /tmp/files.txt


9.- Instalar los archivos descargados


apt-get upgrade


o


apt-get dist-upgrade


10.- FIN!

jueves, 15 de marzo de 2012

Instalar opkg en DD-WRT con Atheros

Update: Esta entrada fue reconstruida completamente, debido a un par de problemas en la instalación de ciertos paquetes con los apuntes anteriores.
 
Lo pasos descritos a continuación corresponden a un resumen personal del documento publicado por "How-To Geek", el cual puede ser consultado en el siguiente link

* Para instalar el comando opkg, es necesario que el router soporte almacenamiento externo (hardware) y que dicho almacenamiento este con formado de archivos "jffs".

* El router utilizado, el cual funcionó perfecto (ahora si), fue el Linksys E2100l (el cual posee una tarjeta Atheros), con la versión de DD-WRT v24-sp2 (12/20/11) std.

Los pasos son los siguientes:

1.- Se debe configurar el router para que monte automáticamente la unidad USB en "/jffs".
Esto se puede configurar en:


Service -> USB -> Disk Mount Point -> /jffs


2.- Nos conectamos al router mediante telnet o ssh y ejecutamos lo siguiente:


# Creamos un directorio temporal.
mkdir /tmp/1
cd /tmp/1

# Instalamos opkg (buscar versión más nueva).
wget http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/opkg_618-2_ar71xx.ipk
ipkg install opkg_618-2_ar71xx.ipk

# Descargamos las librerías de opkg.
wget http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-rootfs.tar.gz

# Copiamos las librerías (los mensajes de omisión son válidos).
tar xvzf openwrt-ar71xx-generic-rootfs.tar.gz
cp -Pp /tmp/1/lib/* /jffs/usr/lib/

# Ocupamos las nuevas librerías.
export LD_LIBRARY_PATH=/jffs/usr/lib:$LD_LIBRARY_PATH

# Le damos permisos de escritura/lectura al "/etc".
mkdir -p /jffs/geek/etc
cp -a /etc/* /jffs/geek/etc/
mount -o bind /jffs/geek/etc/ /etc/

# Hacemos algo parecido con "/opt".
mkdir -p /jffs/opt
mount -o bind /jffs/opt/ /opt/

# Eliminamos el "opkg.conf".
rm /jffs/etc/opkg.conf

# Recreamos el "opkg.conf" en "/etc".
cat > /etc/opkg.conf << EOF
src/gz snapshots http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages
dest root /opt
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay
EOF


# Probamos el opkg.
opkg update
opkg list


3.- Descargamos y extraemos el script de inicio:


http://www.howtogeek.com/wp-content/uploads/2011/12/geek-init1.1.zip


4.- Lo movemos dentro del router a la ruta:


/jffs/geek/etc/geek-init.sh


5.- Le damos permisos de ejecución.


chmod +x /jffs/geek/etc/geek-init.sh


6.- Dentro del WebGUI -> Administration -> Commands, agregamos la siguiente linea al "Startup":


/jffs/geek/etc/geek-init.sh web-gui


Reboot & Enjoy

Fuente:
http://www.howtogeek.com/98408/how-to-install-additional-software-on-your-router-dd-wrt/




Bonus:
Agregar la siguiente linea al script "geek-init.sh":

export PS1='\[\033[01;31m\]\u@\h \[\033[01;34m\]\W \$ \[\033[00m\]' >>/tmp/root/.profile


Arreglar ipkg en DD-WRT

Estos son los pasos que utilizo para dejar funcionando el ipkg en un DD-WRT.

Después de ejecutar todos los pasos y instalar aplicaciones, siempre me sale el mensaje de "permission denied" cuando quiero ejecutar cualquiera de las aplicaciones instaladas. El tema es que no tengo idea como se soluciona eso, es por esto que no utilizo ipkg y si opkg :D

Si alguien se quiere animar a solucionar ese problema, puede seguir mis pasos para que, por lo menos, le funciones el ipkg y luego ver como solucionar el otro drama.

Inicialmente me guié del sitio:
http://busfire.com/installing-software-in-dd-wrt

1.- Lo primero que hay que hacer es configurar el router para que monte automáticamente la unidad USB en "/opt".

Esto se puede configurar en:

  1. Service -> USB -> Disk Mount Point -> /opt

2.- Ejecutar los siguientes comandos para copiar ciertos archivos a la unidad USB (para lograr permisos de escritura):

  1. cp -a /usr/ /opt/
  2. cp -a /bin/ /opt/
  3. cp -a /etc/ /opt/

3.- Crear el directorio por defecto de ipkg haciendo lo siguiente:

  1. mkdir -p /opt/jffs/tmp/ipkg

4.- Montar los directorio que fueron copiados al USB sobre los directorios originales, así se ganan los permisos de escritura (ya que se escribiría dentro de la unidad USB):

  1. mount /opt/jffs /jffs
  2. mount /opt/usr /usr
  3. mount /opt/bin /bin
  4. mount /opt/etc /etc

5.- El script de actualización de ipkg usa de forma equivocada la opción "-passive-ftp" del wget. Esto se corrije ejecutando:

  1. cp /bin/ipkg /bin/ipkg.orig
  2. cat /bin/ipkg.orig |sed -e "s/--passive-ftp //" > /bin/ipkg

6.- Con estos cambios ya se puede ejecutar el ipkg:

  1. ipkg update
  2. ipkg list

Si todo sale bien, es porque todo salió bien jajaja :P

7.- Finalmente quedaría agregar al booteo del router los comandos para re-montar los directorios de la unidad USB:

  1. Administration -> Commands

Escribir lo siguiente:

  1. mount /opt/jffs /jffs
  2. mount /opt/usr /usr
  3. mount /opt/bin /bin
  4. mount /opt/etc /etc

Y guardar con el botón: "Save Startup"

DATO:

El archivo de configuración "/etc/ipkg.conf" debe decir lo siguiente:

  1. src whiterussian http://downloads.openwrt.org/whiterussian/packages
  2. src non-free http://downloads.openwrt.org/whiterussian/packages/non-free
  3. src backports http://downloads.openwrt.org/backports/rc5
  4. dest root /jffs
  5. dest smbfs /tmp/smbshare
  6. dest ram /tmp