# Ayuda en scrip de bash

## natxoblogg

Hola, la verdad es que no tengo ni idea de scrips en bash, y los pocos pinitos que he echo en mi vida a sido una cutrez, pero ahora me veo inmerso en algo, que es una pijada por cierto. Y claro no tengo ni idea de como hacerlo.

El tema esta en que me gustaria que el conky, me mostrara las caratulas de los discos que voy reproduciendo en el amarok. Claro, conky no puede mostrar imagenes, solo los gráficos que tiene implementados y texto, asi que me dige, coño, por que no combieto la imagen png de la caratula del disco a un .ttf, le digo que es la letra "A", por ejemplo y punto, el conky imprime la "A", en esa tipografia y ya esta, la portada toda bonita.

Me puse a buscar que podria hacer para crear fuentes .ttf, y encontre el fontfoge, un programa sencillo y potenete, para crear tipografias. asi que me puse a investigar su man y su web para ver como puedo hacer un scrip que me cree esta tipografia maldita.

esto fue lo que hice en un primer inteto:

```
#!bin/bash

#!usr/bin/fontforge

#primer intent per conseguir que el conky mostre la caratula del amarok

convert `dcop amarok player coverImage` -resize 90x90 /tmp/img.png|echo /tmp/img.png #interval=5000

$variable:/tmp/img.png

open($variable)

Generate($variable:r + ".ttf")
```

y nada me casca por todos los lados diciendome 

/

```
tmp/img.png

convert: no image vector graphics `/tmp/img.png'.

caratula.sh: line 9: :/tmp/img.png: No existe el fichero o el directorio

caratula.sh: line 10: syntax error near unexpected token `$variable'

caratula.sh: line 10: `open($variable)'
```

Y me puse a buscar más y más, pero nada, las únicas pequeñas conclusiones que puedo sacar es que deberia cambiar de .png a .pfa, (imagen en ascii), para después generar el ttf, pero nada igual.

Alguna idea.  :Confused: 

----------

## pelelademadera

proba que no sea en /tmp

x ahi no tenes permisos

----------

## natxoblogg

vale, he cambiado de carpeta, a una en mi /home, me crea la imagen.png, pero nada de la tipografia.

El error sigue siendo:

```
natxo@ganyan scripts $ sh caratula_2.sh

/home/natxo/scripts/img.png

caratula_2.sh: line 9: :/home/natxo/scripts/img.png: No existe el fichero o el directorio

caratula_2.sh: line 10: syntax error near unexpected token `$variable'

caratula_2.sh: line 10: `open($variable)'
```

Alguna idea???.

----------

## i92guboj

Paso a paso,

```

convert `dcop amarok player coverImage` -resize 90x90 /tmp/img.png|echo /tmp/img.png #interval=5000

```

Vamos a olvidarnos del resto del script por ahora y nos concentraremos en esta línea. Ni siquiera se si lo que quieres hacer es factible en absoluto, pero supongamos que si por ahora.

No tengo amarok instalado así que tendrás que guiarme tú. ¿Qué se supone que hace esta llamado a dcop?

```
dcop amarok player coverImage
```

Para poder ayudarte, necesito saber dos cosas: 

qué hace (saca una imagen en pantalla? cambia algo en amarok? guarda la carátula en un fichero?

devuelve algún texto en tu terminal?

No estoy muy seguro de lo que intentas hacer en esa línea y creo que no vas por muy buen camino   :Razz: 

Editado: en un segundo vistazo, creo que entiendo un poco mejor lo que pasa. Creo que has agregado cosas de varios sitios sin saber muy bien de donde vienen o lo que son. La sentencia dcop devuelve la ruta a la carátula actual, ¿es así?. En ese caso, creo que entiendo lo que quieres hacer. Algunas cosas:

```
#!bin/bash
```

Sería (falta la primera barra):

```
#!/bin/bash
```

```
#!usr/bin/fontforge
```

No se cual crees que es el propósito de esta línea de arriba (si es que crees que tenga alguno), pero es un comentario y por tanto es ignorado.

```
convert `dcop amarok player coverImage` -resize 90x90 /tmp/img.png|echo /tmp/img.png #interval=5000
```

Ejecuta "dcop amarok player coverImage" en línea de comandos mientras estás reproduciendo un tema. Asegúrate de que sea un tema que tenga una carátula asociada!. A ver qué retorna. La primera parte del comando, antes del pipe (si dcop hace lo que creo que hace ahí) guardará una imagenn temporal en /tmp/img.png, esto está bien (repito, siempre que dcop devuelva la ruta válida a una imagen). El pipe y lo que va detrás no sirve para nada, excepto para sacar una cadena en pantalla (es lo único que sale en lo que pegaste, aparte de los errores). No se qué intención tenías con ese echo, pero fuera la que fuera, ese código no lo hace.

```

$variable:/tmp/img.png

open($variable)

Generate($variable:r + ".ttf")

```

Esto simplemente no es bash. Todos los errores que aparecen bajo la línea de "/tmp/img.png" se deben a estas líneas.

En resumen, suponiendo que la línea de arriba funcione, te falta buscar la forma de usar fontforge para crear la fuente. No estoy familiarizado con dicha utilidad, pero lo que tienes que buscar son programas ejecutables que puedas usar en línea de comandos, y no a nivel de API (funciones para usar en C o cualquier otro lenguaje).

----------

## natxoblogg

Hola i92guboj, 

 *Quote:*   

> No tengo amarok instalado así que tendrás que guiarme tú. ¿Qué se supone que hace esta llamado a dcop?
> 
> ```
> Código:
> 
> ...

 

Si, lo que hace es devolverme una dirección dónde esta leyendo la caratula, del disco, si no existe me redirecciona a la de por defecto, asi que esto no es un problema, además cómo comente me crea bien la imagen en /tmp.

 *Quote:*   

> 
> 
> ```
> $variable:/tmp/img.png
> 
> ...

 

 *Quote:*   

> 
> 
> ```
> #!usr/bin/fontforge
> ```
> ...

 

El tema es que viendo el web oficial del programa este ("fontforge") el autor mostraba un scrip para (utilizando el programa) crear las fuentes.

El programa en cuastión es este:

```
#!/usr/local/bin/fontforge

Open($1)

Generate($1:r + ".ttf")
```

por eso lo de la linea de #!/usr/local/bin/fontforge, aunque como lo guarda en .pe, pero al poner la cabecera esta pensaba que incluiria librerias en el script, asi que fui de feliz y puse además #!/bin/bash, pensando que era un rollito a c++ o c: incluyendo librerias, ya veo que no   :Embarassed: .

Gracias por la lección!!, pero después de estár mirando un poco más me estoy perdidiendo completamente.

¿alguna idea?

Gracias por adelantado!!

----------

## i92guboj

Ya veo. 

Seguramente se pueda embeber el script de fontforge dentro del de bash de alguna forma, le echo un vistazo a ver como funciona y ya te digo algo.

----------

## natxoblogg

Gracias!!

http://fontforge.sourceforge.net/scripting-tutorial.html

Esta es la web del proyecto, de aquí saque esa feliz idea. Por si sirve.

----------

## i92guboj

La única forma de hacerlo "andar" ha sido separando la parte de bash y la de fontforge en dos archivos distintos, probablemente sea debido a mi nula experiencia con fontforge  :Wink: 

Pongo "andar" entre comillas porque el script parece funcionar, aunque no hace nada porque dice que no puede abrir la imagen png debido a un error de formato.

foo.sh

```

#!/bin/bash

convert $HOME/doc/fotos/50.jpg -resize 90x90 /tmp/img.png

fontforge -script foo.pe /tmp/img.png

```

foo.pe

```

#!/usr/bin/fontforge

Open($1)

Generate($1:r + ".ttf")
```

Ambos con chmod u+x, por supuesto.

----------

## natxoblogg

 *i92guboj wrote:*   

> 
> 
> Pongo "andar" entre comillas porque el script parece funcionar, aunque no hace nada porque dice que no puede abrir la imagen png debido a un error de formato.

 

El tema es que el script ya funciona pero como has dicho no muestra nada, devido a un error de formato.

Actualización:

Ok, después de calentarme la cabeza a mil, he visto que hay que pasar la imagen de png a pfa, pfb o incluso a svg.

Voy a mirar si con el ikscape, puedo hacer algun scrip por el estilo de estos para pasarla a svg, a ver que surge.

Actualización_2:

Tengo que investigar más en el man del inkscape, pero es una locura, quien lo hizo tenia un par de ... 

Solución a priori más factible.

¿alguien sabe como pasar a pfa?,es decir a imagenes en ascii??.

Gracias

----------

## natxoblogg

Una Preguntilla de idea feliz, ¿sabeis si el conky puede mostrar formatos .ps?. Al ser en verdad texto ¿podria mostrarlo?  :Rolling Eyes: 

----------

## i92guboj

Ni idea del tema, pero jamás he oído nada parecido.

La forma más sencilla de mostrar una carátula en conky sería añadir la funcionalidad nativamente. No creo que haya ninguna alternativa fácil.

Una alternativa podría ser usar algún tipo de script para incrustar la carátula en el wallpaper (imagemagick puede hacer eso) y tras eso recargarlo. Suponiendo que conky sea transparente debería verse a través del mismo si dejas el hueco adecuado. Otra alternativa sería usar la imagen como icono en algún tipo de notificación como notify-send o algo similar, claro que ya no tendría nada que ver con conky.

EDITADO: Justo recordé haber visto algo sobre imlib en el TODO de conky, así que he decidido mirar si había nuevas sobre ese tema, y he encontrado esto:

http://conky.wikia.com/wiki/Conky_and_Images_%28IMLIB2%29

Solo para conky >= 1.7.1, aunque no lo he probado. Quizás sea justo lo que necesitas.

Editado de nuevo: acabo de publicar un nuevo ebuild para poder compilar conky 1.7.1 limpiamente. Tiene dos nuevas USE, una para imlib y otra para lua.

https://bugs.gentoo.org/show_bug.cgi?id=273264

----------

