Nota: Habilita AUR antes de utilizar esta guía.
Instalación de Paquetes
Primero, instalaremos los siguientes paquetes:
pcsc-tools ccid opensc libbit4opki ca-certificates-izenpe
Puedes hacerlo utilizando pamac (Añadir/Quitar Software) o a través de la terminal con yay, paru y otros gestores de AUR.
Idazki Desktop
Idazki Desktop debe ser instalado de forma independiente. Instalar el paquete desde el gestor de paquetes da muchos problemas de configuración y no está soportada por IZENPE. Para instalar Idazki Desktop, descargamos el archivo Linux 64 (RUN).
Una vez hayamos descargado el archivo, tenemos que hacerlo ejecutable haciendo click derecho sobre el archivo, pestaña Permisos, y hacemos click en el checkbox de «es ejecutable».

Luego tenemos que ir a una terminal, porque necesitamos permisos de superusuario para ejecutar el programa. Podemos hacerlo con el siguiente comando:
sudo ./idazki-desktop-linux64.run

Una vez hecho ésto, la última parte que veremos será un error sobre un .desktop. No necesitamos preocuparnos por ello.
En el menú de aplicaciones habrán aparecido dos aplicaciones nuevas: Idazki Desktop e Idazki Giltza. Son programas que hablarán con nuestro navegador cuando tengamos que hacer gestiones con Izenpe.
Antes de pasar al navegador, tenemos que dar soporte a la librería libbit4opki.so en Idazki para que pueda reconocer nuestro lector de tarjetas. Ésto se hace accediendo a la carpeta /usr/local/idazki-desktop/ y allí tendremos que editar el archivo pkcs11.properties y añadir las siguientes líneas al final:
/usr/lib/bit4id/libbit4opki.so
/usr/lib64/bit4id/libbit4opki.so
De modo que el archivo quedará así:

Con esto habremos configurado el programa Idazki Desktop e Idazki Giltza para firma de documentos a través del navegador.
Módulo Firefox
Si utilizamos Firefox, tendremos que añadir el módulo de seguridad que nos permite identificar nuestra tarjeta en el navegador. Para ello, vamos a Menú > Ajustes > Privacidad y Seguridad y en el apartado Seguridad pulsamos el botón Dispositivos de Seguridad.
Dentro de la ventana que nos aparece, pulsamos el botón Cargar. En la ventana que nos sale, pondremos un nombre descriptivo como Izenpe y cargaremos el módulo que se encuentra en la siguiente ruta:
/usr/lib64/bit4id/libbit4opki.so
Para que quede de este modo:

Pulsamos Aceptar y habremos cargado el módulo que nos permite identificarnos y firmar con tarjetas Izenpe en nuestro navegador.
Lectura de Tarjeta
Antes de nada, debemos habilitar el servicio de pcsc para poder hacer la lectura de nuestra tarjeta Izenpe. Para ello, en una terminal, escribimos el siguiente comando.
sudo systemctl enable --now pcscd
Ahora, puedes conectar tu lector de tarjetas si no lo habías hecho antes. Para comprobar que el lector se reconoce y que la tarjeta funciona correctamente, podemos ejecutar el siguiente comando en una terminal.
pcsc_scan
Cuando insertemos nuestra tarjeta, veremos una imagen parecida a esta:

Identificación en Servicios
Para comprobar que nos hemos identificado correctamente, podemos utilizar el servicio de prueba de firma de Izenpe disponible en la siguiente página pulsando el botón Probar Identificación.
Si todo sale bien, nos pedirá la contraseña de nuestra tarjeta en la ventana emergente. Una vez introducida, nos redirigirá a una página donde nos mostrará los datos de nuestra tarjeta y certificado Izenpe.

¡Hola! Estupendo el artículo. Ocurre que con algunos sistemas modernos, como Opensuse Tumbleweed o Fedora 41, y especialmente a raíz del ticketbai, esto es más complejo.
Yo utilizo Fakturaraba desde el navegador, que firma con Idazki Desktop. El propio navegador hace la llamada a Idazki desktop; pero por alguna razón que desconozco, la aplicación no llega a abrirse, simplemente no hace nada. La aplicación en sí parece estar instalada con normalidad, cuando se la abre directamente desde el escritorio. ¡Saludos!
Buenas! Creo que cuando se ejecuta desde la web, se ejecuta el Idazki Desktop delegado, que se ejecuta así: java -Xmx512m -Xms512m -jar /usr/local/idazki-desktop/idazkiDelegado.jar %U
Puede que esté teniendo problemas para ver el Idazki delegado o este dando algún error?
Hola, cuando pongo ese comanda que indica, obtengo el siguiente resultado:
[TRACE] 2025/05/10 12:40:40.924 LogUtils:18 – IZENPELIB Core Version is 3.6.2
[TRACE] 2025/05/10 12:40:40.937 LogUtils:19 – TIME: Sat May 10 12:40:40 CEST 2025
[TRACE] 2025/05/10 12:40:40.938 LogUtils:49 – Leyendo propiedades por defecto…
[TRACE] 2025/05/10 12:40:40.938 LogUtils:54 – proxyAuto=true [no se ha encontrado la propiedad: se establece la configuracion del sistema]
[TRACE] 2025/05/10 12:40:40.939 LogUtils:59 – proxyAutoUser=null
[TRACE] 2025/05/10 12:40:40.939 LogUtils:60 – proxyAutoPassword=null
[TRACE] 2025/05/10 12:40:40.939 LogUtils:61 – proxy=null
[TRACE] 2025/05/10 12:40:40.939 LogUtils:64 – connectTimeOut=60000
[TRACE] 2025/05/10 12:40:40.939 LogUtils:67 – readTimeOut=60000
[TRACE] 2025/05/10 12:40:40.939 LogUtils:70 – enablePinCache=false
[TRACE] 2025/05/10 12:40:40.939 LogUtils:73 – maxPinSession=14400000
[TRACE] 2025/05/10 12:40:40.940 LogUtils:81 – dlgcertsel-selectfirst=true
[TRACE] 2025/05/10 12:40:40.940 LogUtils:84 – enableMozillaKeyStore=false
[TRACE] 2025/05/10 12:40:40.940 LogUtils:87 – mozillaUserProfile=
[TRACE] 2025/05/10 12:40:40.941 LogUtils:90 – showCNPinDialog=false
[TRACE] 2025/05/10 12:40:40.941 LogUtils:93 – log4jAppend=false
[TRACE] 2025/05/10 12:40:40.941 LogUtils:23 – Leyendo propiedades del sistema…
[TRACE] 2025/05/10 12:40:40.941 LogUtils:25 – JAVA SYSTEM os.name=Linux
[TRACE] 2025/05/10 12:40:40.941 LogUtils:26 – JAVA SYSTEM os.arch=amd64
[TRACE] 2025/05/10 12:40:40.941 LogUtils:27 – JAVA SYSTEM java.vendor=Red Hat, Inc.
[TRACE] 2025/05/10 12:40:40.942 LogUtils:28 – JAVA SYSTEM java.version=21.0.7
[TRACE] 2025/05/10 12:40:40.942 LogUtils:29 – JAVA SYSTEM java.class.version=65.0
[TRACE] 2025/05/10 12:40:40.942 LogUtils:30 – JAVA SYSTEM file.encoding=UTF-8
[TRACE] 2025/05/10 12:40:40.943 LogUtils:31 – JAVA SYSTEM java.class.path=/usr/local/idazki-desktop/idazkiDelegado.jar
[TRACE] 2025/05/10 12:40:40.943 LogUtils:33 – JAVA RUNTIME freeMemory=522207456
[TRACE] 2025/05/10 12:40:40.943 LogUtils:34 – JAVA RUNTIME maxmem=536870912
[TRACE] 2025/05/10 12:40:40.944 LogUtils:36 – PROXY http.useProxy=null
[TRACE] 2025/05/10 12:40:40.944 LogUtils:37 – PROXY http.proxyHost=null
[TRACE] 2025/05/10 12:40:40.944 LogUtils:38 – PROXY http.proxyPort=null
[TRACE] 2025/05/10 12:40:40.944 LogUtils:39 – PROXY https.proxyHost=null
[TRACE] 2025/05/10 12:40:40.944 LogUtils:40 – PROXY https.proxyPort=null
[TRACE] 2025/05/10 12:40:40.945 LogUtils:42 – SOCKS socksProxyHost=null
[TRACE] 2025/05/10 12:40:40.945 LogUtils:43 – SOCKS socksProxyPort=null
[TRACE] 2025/05/10 12:40:40.945 LogUtils:45 – java.net.useSystemProxies=null
Exception in thread «main» java.lang.StringIndexOutOfBoundsException: Range [0, -1) out of bounds for length 2
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4865)
at java.base/java.lang.String.substring(String.java:2834)
at com.izenpe.idazki.delegado.utils.DelegadoUtils.getServiceURL(DelegadoUtils.java:14)
at com.izenpe.idazki.delegado.Main.main(Main.java:52)