# Impresión desde USB

Aunque Klipper está enfocado en usarlo remotamente, en ocasiones puede sernos útil el disponer nuestros gcodes en un pendrive USB para imprimirlos localmente.

* Primero de todo nos fijaremos cuál es el punto de montaje de nuestro USB normalmente suele ser en /media o creando un nuevo bloque dentro de /dev/
* Para poder identificar nuestro punto de montaje podemos usar el comando fdisk... en el siguiente ejemplo veremos que nos ha montado nuestro USB en /dev/sdc1

{% hint style="info" %}
Normalmente el comando fdisk requiere permisos root por lo que es necesario lanzarlo con sudo delante para introducir nuestro password root
{% endhint %}

```bash
sudo fdisk -l
```

{% code title="Salida del comando anterior:" %}

```bash
Disk /dev/sdc: 7.4 GiB, 7948206080 bytes, 15523840 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device     Boot Start      End  Sectors  Size Id Type
/dev/sdc1  *     8192 15523839 15515648  7.4G  b W95 FAT32
```

{% endcode %}

* Montaremos nuestro USB en /media/usb

```bash
mount /dev/sdc1 /media/usb/
```

{% hint style="success" %}
**Como montar de forma permanente nuestro USB**:

El proceso seguido en los pasos no es permanente dado que dejará de funcionar al reiniciar nuestro host, si queremos que sea permanente:

* editaremos nuestro fichero /etc/fstab

```bash
sudo nano /etc/fstab
```

* añadiremos nuestro punto de montaje añadiendo esta linea prestando atencion al sistema de archivos que usemos... normalmente vfat

```
/dev/sdc1       /media/usb           vfat    defaults        0       0
```

* <mark style="color:orange;">**IMPORTANTE!!! en el punto anterior os sugerimos el punto de montaje basado en un bloque /dev/ que dependiendo del numero de USB que pongamos puede variar. En ese caso lo mas correcto seria usar el UUID**</mark>
* Podemos encontrar nuestro UUID con el siguiente comando

```bash
ls -l /dev/disk/by-uuid/*
lrwxrwxrwx 1 root root 10 Mar 27 23:38 /dev/disk/by-uuid/2016-08-30-11-31-31-00 -> ../../sdb1
lrwxrwxrwx 1 root root 10 Mar 27 23:38 /dev/disk/by-uuid/3eccfd4e-bd8b-4b5f-9fd8-4414a32ac289 -> ../../sda1
lrwxrwxrwx 1 root root 10 Mar 27 23:38 /dev/disk/by-uuid/4082248b-809d-4e63-93d2-56b5f13c875f -> ../../sda5
lrwxrwxrwx 1 root root 10 Mar 28 01:09 /dev/disk/by-uuid/8765-4321 -> ../../sdc1
lrwxrwxrwx 1 root root 10 Mar 27 23:38 /dev/disk/by-uuid/E6E3-F2A2 -> ../../sdb2
```

* Ahora una vez identificado el UUID de nuestro USB ajustaremos nuestro /etc/fstab usando este en lugar del bloque /dev

```
/dev/disk/by-uuid/8765-4321       /media/usb           vfat    defaults        0       0
```

* Por último y ya sea mediante bloque /dev o mediante UUID montaremos nuestras unidades con el siguiente comando

```bash
mount -a
```

{% endhint %}

{% hint style="info" %}
Si queremos tener compatibilidad con otros sistemas de archivos podemos:

* NTFS

```bash
sudo apt install ntfs-3g
```

* exFAT

```bash
sudo apt install exfat-fuse
sudo apt install exfat-utils
```

{% endhint %}

* Averiguaremos cuál es nuestro path en Klipper para nuestros gcodes, normalmente suele ser \~/printer\_data/gcodes

{% hint style="info" %}
Para asegurarnos en que path guardamos nuestros gcodes podemos revisar nuestros ficheros de configuración y encontrar la sección \[virtual\_sdcard] donde encontraremos esta información.

```django
[virtual_sdcard]
path: ~/printer_data/gcodes
on_error_gcode: CANCEL_PRINT
```

En el caso que usemos, por ejemplo, una distribución basada en MainsailOS podremos encontrarlo dentro de mainsail.cfg
{% endhint %}

* Dentro de nuestro path en Klipper para almacenar nuestros gcodes crearemos una nueva carpeta llamada usb -> \~/printer\_data/gcodes/usb

```bash
mkdir ~/printer_data/gcodes/usb
```

* Crearemos un link simbólico de nuestro punto de montaje USB /media a nuestro nuevo directorio

```bash
ln -s /media/usb /home/pi/gcode_files/usbs
```

{% hint style="info" %}
Podemos mirar nuestros puntos de montaje con:

```bash
mount | grep sdc1
/dev/sdc1 on /media/usb type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=utf8,shortname=mixed,errors=remount-ro
```

{% endhint %}

### Resolución de problemas:

En ocasiones puede que no se monten las unidades correctamente al iniciarse el proceso antes de que estas estén disponibles. La forma más sencilla es **editando el fichero /etc/rc.local**

```bash
sudo nano /etc/rc.local
```

**y añadiendo las siguientes líneas encima de exit 0**

```bash
sleep 20
sudo mount -a 
```
