# 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 
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://klipper.3dwork.io/klipper/mejoras/impresion-desde-usb.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
