Cree un cliente ligero RDP basado en Raspberry Pi

Con la creciente popularidad de las mini PC como Raspberry Pi y clones similares, hubo muchos casos para su uso en la infraestructura de TI de la empresa, casa inteligente / casa de campo / garaje y otras aplicaciones.

Uno de los casos convenientes y deseables es el uso de RPi como un cliente ligero que se conecta a través de RDP a sistemas basados ​​en Windows.

Si está interesado en cómo configurar un lugar de este tipo sobre la base de la Raspberry Pi, y de tal manera que "configure y olvide", bienvenido al gato. Hay una imagen preparada para los completamente vagos (ver sección 6.B).

Una imagen para llamar la atención.


Específicamente, en mi experiencia (un especialista en automatización de contabilidad / gestión), a menudo tenía que organizar lugares de trabajo cuyo único propósito era acceder a un programa (principalmente amarillo), una suite de oficina, Internet y correo. A veces, trabaje con unidades flash. El servidor, al mismo tiempo, ya estaba en la empresa.

Al mismo tiempo, la estación requería poco ruido, compacidad y fiabilidad. O, seamos honestos, barato. Especialmente si la pregunta era sobre el comercio minorista, donde todo debería ser "clavado".

Al mismo tiempo, en el pasado, se probaron muchas soluciones en forma de clientes ligeros especializados "de hierro", pero por una serie de razones resultaron incómodas. En algún lugar, se requerían tareas relacionadas específicas, como el reenvío de impresoras a un servidor, que no podían hacer frente. En algún lugar, las tablas aparecieron lentamente, lo que volvió locos a los usuarios. En algún lugar, los clientes delgados simplemente trabajaban en un solo lugar, y era imposible entender por qué. En algún lugar, la carga de red caprichosa no funcionó, o los parámetros no se transfirieron a través de DHCP.

Por lo tanto, de alguna manera natural, todo llegó a la conclusión de que es más fácil comprar un nettop basura y ponerle un conjunto mínimo de software que adivinar un juego con hierro oscuro, más a su propio costo, porque no se sabe de antemano dónde y qué no funciona. , pero se sabe con certeza que todo debería haber estado bien, y no tomar tanto tiempo.

El artículo llegó un poco tarde con la relevancia. Si vuelve al mismo programa amarillo, en los últimos años la plataforma se ha desarrollado, tiene su propio cliente ligero y la relevancia de su implementación en modo de escritorio remoto ha disminuido.

Pero hay una serie de otras tareas donde una estación de trabajo silenciosa y confiable conectada a través de RDP será apropiada. Y en los últimos años, el costo de las mini-PC ha subido hasta ahora, y el de las computadoras y nettops estándar, se ha vuelto más rentable (el costo del hardware, una hora de trabajo especializado, además de las licencias CAL / TCAL para Windows Server) para construir tales soluciones.

Declaración del problema.


Entonces, sobre la base de Raspberry Pi, necesitamos implementar un cliente RDP delgado, "clavar" a un servidor específico, además de proporcionar reconexión en caso de falla.

Cualquier interacción del usuario con el dispositivo en sí debe ser excluida. En consecuencia, no hay comandos locales de escritorio y consola. La contraseña se ingresa solo para la sesión RDP.

Como beneficio adicional, organice unidades USB extraíbles de montaje automático y probros.

Dado:

  • Raspberry Pi 3 puro Modelo B 1 Gb, o 4 Modelo B 1 Gb
  • Adaptador de corriente 5v 2A,
  • Cable HDMI
  • adaptador con HDMI al monitor (si el monitor no tiene un puerto HDMI incorporado),
  • Cable Ethernet (o la presencia de una red WiFi),
  • Tarjeta de memoria MicroSD con 8 GB o más (4 GB es objetivamente suficiente, pero me parece que puede comprar una tarjeta de 4 GB solo en el museo).
  • monitor, teclado, mouse para frambuesa.

En el momento de la instalación: una computadora (computadora portátil) con Windows o Linux, un adaptador de tarjeta microSD.

Se supone que el lector tiene la habilidad básica de administrar sistemas Linux, y la pregunta "crear y editar un archivo, copiar el texto de este artículo en él" o "conectarse a través de SSH" no causará dificultades. Sin embargo, a veces me permito una excursión más profunda, para aquellos que podrían no haberse encontrado específicamente con Raspbian.

Lógica general: configure el sistema base, instale el cliente RDP, configure el inicio de sesión automático, pruebe, solucione problemas.

También describirá cómo clonar un ensamblaje terminado en otra Raspberry.

El diseño del software en sí es sencillo, nació de una forma u otra hace unos 9 años, como recuerdo ahora, lo hice bajo Debian Etch. Desde entonces, ha cambiado un poco de versiones de software y hardware a versiones, y ahora es el momento de portarlo a Raspberry.

El consumo de tiempo planificado es de aproximadamente 30 minutos.

1. Configuración del sistema base


1.1 Descargar imagen del sistema


Elegiremos Raspbian como sistema.

Al momento de escribir, esto se puede hacer aquí . La versión actual es Buster.

Seleccione Imagen mínima basada en Debian Buster.



Descargue el archivo ZIP para obtener el único archivo .img.



1.2 Escríbelo en una tarjeta flash


a) Bajo Windows

Descargue el programa Rufus del sitio oficial . Una versión portátil es suficiente.

Ejecute el programa, seleccione la tarjeta SD y la imagen extraída del archivo en el párrafo 1.1.



Presione el botón "INICIAR", confirme la destrucción de datos en la tarjeta SD, espere a que se complete el proceso (aproximadamente 5 minutos).

Retire con seguridad la tarjeta.

b) bajo Linux

Ejecute el comando:

# dd if=2019-09-26-raspbian-buster-lite.img of=/dev/< SD-> bs=4M 

Espere a que se complete el proceso, saque la tarjeta.

1.3 Implemente el sistema en RPI


Reorganizamos la tarjeta al dispositivo de destino. Conectamos la mini PC con un monitor, teclado, mouse y le aplicamos energía.

Después de un tiempo, sin hacer preguntas adicionales, la mini PC se reiniciará en el sistema recién implementado y lo invitará a ingresar su nombre de usuario y contraseña.
Por defecto, esto es pi: frambuesa.



1.4 Inicie sesión y cambie su contraseña


 # passwd pi 

o

 $ sudo passwd pi 

(Ejecuté passwd intencionalmente para el usuario pi como root para que Raspbian no nos atormente con los requisitos de seguridad para la contraseña, pero la acepta y la acepta)

No puede iniciar sesión directamente como root a menos que establezca explícitamente una contraseña para ello. En general, esto no es malo. Entonces, todos los comandos que deben ejecutarse bajo el superusuario deben ejecutarse desde el usuario pi con el comando sudo prefix. Como en Ubuntu.

Por ejemplo (una broma famosa, ¡no corras! )

 $ sudo rm -rf --no-preserve-root 

Sin embargo, dado que soy patológicamente flojo, entonces, al iniciar sesión en Raspbian, o en el mismo Ubuntu, escribo:

 $ sudo bash 

Y recibo la invitación #, ya con derechos elevados. Entonces yo trabajo.
Estrictamente hablando, hacerlo no es bueno, pero en la etapa de la configuración inicial del sistema ahorra mucho tiempo.

En lo sucesivo, si los comandos anteriores están precedidos por #, deben ejecutarse bajo superusuario. Si con $, entonces debajo del usuario (generalmente se indica arriba debajo de cuál).

2. Instalando el software necesario "como mínimo", probando la conexión


2.1 Configurar red


Para hacer esto, ejecute la utilidad administrativa ejecutando el comando:

 # raspi-config 



(La navegación se realiza mediante flechas, tabulación, Intro - elección, ESC - retorno)
Vaya a Opciones de red .

Establezca el nombre del equipo (nombre de host del punto N1 ), por ejemplo, TERM1 .

Si la computadora está conectada a la red con un cable Ethernet y recibe una dirección DHCP, entonces no es necesario hacer nada más.

Si necesita configurar una red WiFi, hágalo (punto N2 Wi-Fi ). Elige tu pais. El nombre de la red deberá ingresarse manualmente; no se proporciona una descripción general. Nosotros especificamos la contraseña .

Luego Finalizar -> Finalizar .

Reiniciar a pedido, o con el comando:

 # reboot 

Después de volver a iniciar sesión, asegúrese de tener acceso a Internet.

 # ping 8.8.8.8 

2.2 Sistema de actualización


Actualizar información sobre paquetes disponibles.

 # apt-get update 

Ahora actualice el sistema (Opcional, pero altamente deseable. Puede hacerse más tarde).

 # apt-get upgrade 

Esta etapa puede llevar mucho tiempo (tengo unos 15 minutos), porque se actualiza el gestor de arranque binario RPi, que descomprime muchos archivos pequeños en la tarjeta SD.
Tenga en cuenta que casi inmediatamente después de que se complete la descarga y comience el desempaquetado, algún paquete desagradable le pedirá que presione "q", deteniendo el proceso. Tendrá que hacer clic antes de distraerse con otras cosas para esperar.
Al final de la actualización, debe reiniciar

 # reboot 

2.3 Instalar la configuración regional y el diseño de Rusia


De nuevo en la utilidad administrativa:

 # raspi-config 

Siga las Opciones de localización , allí:

  1. Cambie la configuración regional , elimine * de en-GB.UTF-8 e instale enfrente de ru-RU.UTF-8 . Confirmamos, y en la siguiente ventana lo seleccionamos como el principal.
  2. Cambie la zona horaria y seleccione la zona horaria de su país y ciudad.
  3. Cambie la distribución del teclado , hay PC genérica de 105 teclas (Intl)OtroRusoRusoControl + Mayús (o Alt + Mayús, si lo desea, para cambiar la distribución) → Sin conmutador temporalAlt Alt (AltGr)Sin tecla de composición .

Confirmar y salir - FinalizarFinalizar .

Dejamos la utilidad de administración, ejecute el comando:

 # dpkg-reconfigure console-setup 

seleccione UTF-8Adivina el conjunto de caracteres óptimoDeje que el sistema seleccione ... (abajo) → 8x16 .

Las fuentes deberían volverse visualmente más delgadas, pero lo principal es que ahora admiten el alfabeto cirílico.

Reiniciamos, iniciamos sesión, probamos el diseño en inglés, el cambio y el diseño en ruso.

2.4 Determinado con software auxiliar y editor


Para trabajar con archivos, navegar por la estructura de carpetas y editar archivos, realmente me gusta Midnight Commander , por lo tanto:

 # apt-get install mc 

Lo ejecuto bajo los derechos de root, y la primera vez que uso el editor (tecla F4 en algún archivo) selecciono mcedit (punto 2).

Por supuesto, puede editar archivos con las herramientas que elija. Por ejemplo, usando nano, o incluso VIM.

2.5 Instalar el servidor ssh


 # apt-get install ssh 

Edición / etc / ssh / sshd_config. Descomente la línea:

 ListenAddress 0.0.0.0 

Desbloquear carga automática

 # systemctl enable ssh.service 

Reiniciar el servicio

 # systemctl restart ssh.service 

Descubrimos la dirección IP con el comando

 # ifconfig 

Y ahora podemos conectarnos al dispositivo de forma remota desde la computadora de origen a través de SSH (en Windows Personalmente me gusta el cliente PuTTY SSH) para configurar desde una estación de trabajo conveniente y poder copiar y pegar los textos de este artículo a las configuraciones. Les recuerdo que el inicio de sesión es pi , no root.



Otras acciones que recomendaría hacer exactamente a través de SSH, a menos que se indique lo contrario.

2.6 Mover particiones volátiles a discos virtuales


Por ejemplo, / tmp y / var / log , para:

  1. el sistema no agudizó una tarjeta SD,
  2. había menos posibilidades de que el sistema de archivos raíz se desmoronara durante un corte de energía,
  3. para que en un futuro lejano, los registros no obstruyan el espacio libre en el mapa.

Para hacer esto, agregue líneas a / etc / fstab :

 tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=100m 0 0 tmpfs /tmp tmpfs defaults,noatime,nosuid,size=100m 0 0 

No olvide poner un salto de línea al final del archivo.

Aquí, a las secciones / var / log y / tmp se les asignan 100 mb de memoria cada una (se usará solo cuando esté llena). Gigabyte Pi, que se usa solo para RDP, estos gastos no obstaculizarán nada.

Reinicie el sistema y luego ejecute el comando:

 # df 

y asegúrese de que las particiones estén montadas en tmpfs (3 y 4 columnas pueden diferir):

 tmpfs 102400 8 102392 1% /tmp tmpfs 102400 224 102176 1% /var/log 

2.7 Obtendremos el usuario bajo el cual, posteriormente, lanzaremos automáticamente el shell gráfico


Ejecute el comando:

 # adduser user 

Establecer una contraseña arbitraria. Se pueden omitir todo tipo de nombres y teléfonos. Confirmar

2.8 Instalar X-server en una versión mínima


Ejecute el comando:

 # apt-get install xserver-xorg xinit xterm x11-xserver-utils 

Esto puede demorar unos 5 minutos.

Ahora debe sentarse en el terminal físico (en el sentido de un monitor, teclado y mouse conectados directamente a la Pi), iniciar sesión como usuario y ejecutar el comando:

 $ startx 

La siguiente imagen debería aparecer en la pantalla, lo que significa que x-server se ha instalado correctamente y puede continuar.



Pasamos el cursor sobre el cursor (es importante, ya que no hay una ventana que forme un marco y un título de ventana, y la ventana simplemente no recibirá texto sin un foco explícito) y escriba

 $ exit 

para volver

2.9 Instalar software para trabajar con escritorio remoto


Personalmente me gusta rdesktop . Por supuesto, no carece de matices (consulte la sección "Extracción de rastrillo"). Hay alternativas como xfreerdp , remmina , etc., aunque también se quejan de ellas.

Daré un ejemplo para el primero.

 # apt-get install rdesktop 

Cree un script que ejecute rdesktop en pantalla completa. En el directorio / home / user, cree el archivo runrdp (preferiblemente como usuario):

 #!/bin/bash rdesktop <  IP  > -u <   > -f -z 

Si ha elegido otro cliente RDP, escriba aquí la línea de comando o use la masa de parámetros adicionales que tiene rdesktop. Incluso puede codificar la contraseña para iniciar sesión automáticamente.

Debe poner los derechos para ejecutar este script, y si lo creó como root, entonces el propietario es el usuario.

 # chmod 755 /home/user/runrdp # chown user:user /home/user/runrdp 

Ahora, vamos a la consola física debajo del usuario, inicie startx, en el terminal gráfico abierto (vea la figura anterior), escriba:

 $ ./runrdp 

La ventana para conectarse al escritorio remoto debe aparecer en la pantalla.



Si:

a) la consola muestra algo sobre el error CredSSP,
b) el modo de pantalla completa en FullHD deja bordes oscuros (como en la foto-foto No. 4 de este artículo, aunque hay un modo de consola, pero puede ver los bordes)
luego vea la sección Extracción de rastrillo.

Y si todo está bien, cancele el inicio de sesión del sistema (Esc, o el elemento de menú "Desactivar"), abandone el terminal x, escriba exit, vuelva a la consola.

3. Automatización de las sesiones de elevación.


Si todos los pasos anteriores funcionan, entonces es hora de poner todo junto.

Para hacer esto, haremos que cuando el sistema se inicie, el usuario inicie sesión automáticamente en el terminal, inicie el servidor X y se conecte al RDP que se encuentra debajo. Por lo tanto, la contraseña se solicitará solo para la sesión RDP, lo que salvará a las mentes inmaduras de las habilidades innecesarias de domar Linux.

3.1 RDP infinito


Creemos un script que, al iniciar el servidor x, intente sin cesar abrir una sesión RDP.
Para hacer esto, en el directorio / home / user, cree un archivo de ejecución automática al comienzo de la sesión X.xinitrc , los siguientes contenidos:
 setxkbmap -option terminate:ctrl_alt_bksp #    Ctrl-Alt-BkSpace setterm -blank 0 -cursor off #   xsetroot -solid gray #      while /bin/true; do ./runrdp done 

3.2 servidor Infinite X


Arreglaremos un script que define el inicio automático de los programas y la configuración del perfil durante el inicio de sesión de la consola para que la sesión x se inicie automáticamente, pero solo cuando el usuario inicie sesión en el primer terminal.

Gracias a gecube por recordarme que desactive el protector de pantalla. Por defecto, es una pantalla negra que, para la mayoría de los monitores modernos, es bastante dañina.


Editemos /home/user/.profile , agregando las siguientes líneas allí:

 if [ -z "$DISPLAY" ] && [ $(tty) = "/dev/tty1" ]; then startx clear echo " 5    " sleep 5 exit fi 

3.3 Prueba intermedia de un grupo


Reiniciamos Pi, nos sentamos en la terminal, iniciamos sesión como usuario usuario. Obtenemos la ventana de inicio de sesión en la pantalla, como en la figura anterior.

Intentamos negarnos a ingresar la contraseña (esc, o depende de la versión de Windows): obtenemos la misma ventana para el inicio de la sesión (es decir, nuestro script de 3.1 se vuelve a conectar constantemente).

Esperamos aproximadamente un minuto (dependiendo del servidor) sin tocar el teclado y el mouse; la ventana para iniciar la sesión debería apagarse pronto (la sesión RDP en la etapa de ingreso de contraseña sin actividad caduca en el tiempo de espera). Por supuesto, debido a la cláusula 3.1, se volverá a conectar.

Ahora presiona Ctrl + Alt + BkSp . La sesión X debe interrumpirse, se mostrará una inscripción sobre la espera de 5 segundos, después de lo cual la sesión de la consola finalizará también. La pantalla le pedirá que ingrese al terminal con un nombre de usuario y contraseña.

Si todo es así, excelente.

Solo necesitamos iniciar sesión automáticamente en el terminal.

3.4 Autologina repetitiva de naranja infinitamente deliciosa en tty1


Para hacer esto, desde la raíz, cree el archivo /etc/systemd/system/getty@tty1.service.d/autologin.conf con los siguientes contenidos:

 [Service] ExecStart= ExecStart=-/sbin/agetty --autologin user --noclear %I 38400 linux 

Entonces:

 #systemctl enable getty@tty1.service 

Reiniciamos, nos aseguramos de que la consola física inicie sesión automáticamente como usuario, se inicie el servidor X y se abra la sesión RDP, y luego todo estará como en 3.3.
Presione Ctrl + Alt + BkSp, espere la reconexión.

Ingresamos al sistema, prueba de conmutación, el trabajo de diseños. Si algo está mal, vea la sección 4.

Esto completa la configuración.

Se debe indicar a los usuarios que si algo sale mal (la pantalla se pone en blanco, algo se congela, etc.), primero deben presionar Ctrl + Alt + BkSp y esperar la reacción.

Consulte también la sección 5 sobre montaje automático de USB.

4. Extracción de rastrillo


Dado que este es un OpenSource, la extracción de rastrillos es un proceso desesperado y continuo. Trataré de describir el rastrillo principal posible, pero quién sabe qué nos espera. Yo, personalmente, nunca tuve suerte, y ninguna instrucción me funcionó sin horas de búsqueda adicional.

4.1 Problemas con el uso incompleto de la resolución de pantalla


Síntomas: en casos con algunos equipos (adaptadores HDMI-DSUB, algunos monitores), raspbian no utiliza toda la resolución disponible del monitor Full-HD. Los campos oscuros permanecen entre la información relevante y el borde físico de la pantalla.

Se resuelve de la siguiente manera:

Edite /boot/config.txt , encuentre la línea

 # disable_overscan = 1 

y descomentarlo.

Reiniciar

Ahora los campos oscuros de los bordes de la pantalla deben eliminarse tanto en la consola como en los modos gráficos.

4.2 Problemas con el cursor del mouse al conectar rdesktop a servidores RDP modernos


Esto se refiere principalmente a Windows 2012, 2016, Windows 10, donde se incluye el tema del cursor.

Síntomas: el cursor desaparece, está mal dibujado, después de cambiar a no estándar (reloj de arena, símbolo I, flechas de ampliación de ventana, etc.) se olvida de cambiar a una flecha normal.

Solución: como usuario del servidor al que se está conectando, vaya a las propiedades del mouse a través del panel de control, restablezca el tema a "No" y apague las sombras debajo del puntero.



Los cursores deben llegar a la obediencia.

4.3. Problemas de codificación con rdesktop


Síntomas: en algunos casos, a través de la conexión RDP, los caracteres especiales se escriben incorrectamente en el sistema remoto: tildes, barras, comillas, puntos, barras verticales. Especialmente comience a enfurecer los puntos, porque a menudo se escriben a máquina.

Solución:

En / usr / share / rdesktop / keymaps cree un archivo sin procesar y llénelo con el siguiente contenido:

 include common map 0x419 grave 0x29 asciicircum 0x07 shift backslash 0x2b bar 0x2b shift apostrophe 0x28 greater 0x34 shift less 0x33 shift 

Agregue el argumento sin formato -k al símbolo del sistema rdesktop en el script / home / user / runrdp . Por ejemplo:

 rdesktop 10.0.0.1 -u user -k raw 

Reinicie la sesión en la terminal con Ctrl + Alt + BkSp o generalmente reinicie el Pi.

Ingrese RDP, pruebe todos los caracteres especiales, incluidos con Shift en la línea numérica del teclado y las teclas laterales a la izquierda y derecha de la sección de letras, con Shift y sin (comillas, dos puntos, signos de puntuación, barras, etc.). Todo debería funcionar.

4.4. Cuando intenta iniciar rdesktop, la sesión no se abre, el error CredSSP se muestra en la consola


 CredSSP: Initialize failed, do you have correct kerberos tgt initialized ? Failed to connect, CredSSP required by server. 

El sistema de destino requiere un algoritmo de autenticación de cliente moderno, que rdesktop normalmente no puede hacer.

Opciones de solución:

  1. Deshabilite la autenticación del servidor reduciendo la configuración de seguridad. Básicamente, en entornos donde Pi está tratando de usar RDP como cliente, esto no debería ser un gran problema de seguridad.
  2. Use otro cliente, por ejemplo freerdp, remmina, reemplazando el contenido del script runrdp con la línea de inicio de este cliente.
  3. Instala y configura el cliente kerberos, pero de alguna manera todo es complicado allí. Si quieres probar, comienza aquí .

4.5. Encender y apagar el dispositivo


Raspberry Pi no tiene un botón de apagado. Esto es malo Resulta que no hay una forma efectiva de encenderlo y apagarlo. Mucho se ha escrito sobre esto, intentaré resumirlo brevemente:

  1. Por un lado, no podemos apagar el dispositivo, apagando solo el monitor. Estrictamente hablando, donde pongo el RPi, todo está hecho. En general, el dispositivo casi no se calienta, no consume electricidad, no hace ruido. El monitor, antes de salir, el usuario se apagará.
  2. Puede configurar la noche libre con Cron, pero luego para encender el RPi por la mañana, el usuario tendrá que hacer malabarismos con el cable o la fuente de alimentación.
  3. Puede resolver este problema comprando un cable de alimentación USB con un botón abierto (para encender el RPi, solo necesita abrir el circuito brevemente con un botón). 120 rublos es todo un placer. Pero aquí, los usuarios tendrán el apagado automático de la misma manera que el dispositivo se bloqueará. Dado que hemos movido las particiones volátiles a tmpfs, es probable que no haya problemas, pero nadie está seguro de que el usuario no se registrará en la mañana debido al colapso de rootfs. No funcionó, por así decirlo, la solución "clavó".
  4. Hay soluciones con un botón adicional que se incluye en el puerto GPIO y enciende / apaga el dispositivo suavemente (de la manera adecuada). Pero las granjas colectivas al edificio: es pasar horas y aumentar los costos de producción.
  5. Sin embargo, para el RPi incluso hay un caso con un botón incorporado (los chinos lo tienen todo). Pero personalmente aún no lo he probado.
  6. Pienso en encender el dispositivo a través de un interruptor en el cable USB y apagarlo mediante una tecla de acceso rápido (como Ctrl + Alt + Shift + P), que es monitoreado por el servicio del sistema, pero no es posible trabajar con esta solución.

4.6 Reconexiones múltiples al servidor RDP


En el esquema actual, el dispositivo cliente se conectará al servidor usando el protocolo RDP, mostrará la ventana de ingreso de usuario y contraseña, y si el usuario no ingresa nada, luego de un tiempo la sesión se reiniciará y el cliente RDP comenzará nuevamente, y así hasta el infinito.

En los comentarios, el usuario de Mnemonik dijo que con múltiples reconexiones permanentes, Windows Server se queda sin memoria, y dio un ejemplo de cómo resolver el problema.

Yo traeré el mío. Modificaremos el script .xinitrc para que después de completar el siguiente proceso de rdesktop, se muestre un cuadro de diálogo modal que evite reiniciar hasta que se haga clic en el botón Aceptar.

Para hacer esto, puede usar el xmessage regular incluido en el paquete xorg, pero las ventanas creadas por él son tan feas que mi monitor se está agrietando. Además, esta aplicación no es compatible con el idioma ruso, y activarlo es otra tarea.

Estoy impresionado por gxmessage, desprovisto de este inconveniente, pero extrae GTK y 25 megabytes de otras dependencias, que tampoco me gustan. Bueno, escojamos un mal menor:
 apt-get install gxmessage 

Cambie el script .xinitrc:
 setxkbmap -option terminate:ctrl_alt_bksp #    Ctrl-Alt-BkSpace setterm -blank 0 -cursor off #   xsetroot -solid gray #      while /bin/true; do ./runrdp gxmessage --center " OK      RDP" done 

Ahora, entre los intentos de rdesktop de conectarse al servidor, se mostrará un mensaje correspondiente en nuestra pantalla, y no habrá un "bombardeo" constante del servidor.

Una vez finalizado el script fácilmente, puede verificar previamente la disponibilidad de red del servidor y mostrar un mensaje sobre la reconexión debido a la falta de comunicación.

4.7 Configuración de NTP


Gracias a gecube por recordarme este momento. Teóricamente, el tiempo en el dispositivo puede "flotar" con el tiempo, lo que puede causar dificultades con la autenticación y quizás otros problemas.
Para solucionar este pequeño problema, debe instalar el programa ntpdate y registrar en cron una tarea para actualizar la hora cada hora (el dispositivo necesitará acceso a Internet):

 # apt-get install ntpdate # echo "0 * * * * root ntpdate pool.ntp.org" > /etc/cron.d/ntp 

Si tiene un servidor NTP local en su red, reemplace el nombre de host con el suyo.

5 Opcional: conectar, desconectar y reenviar dispositivos USB


En realidad, esta sección incluye dos etapas cruciales. En primer lugar, gestionar dispositivos USB para garantizar su montaje automático y, al menos, un desmontaje controlado por el usuario. Y en segundo lugar, reenvíe los dispositivos conectados al terminal para que sean accesibles a través de la red.

5.1. Configuración de montaje automático


Los dispositivos USB enchufables con sistemas de archivos se montarán en subdirectorios del directorio / media. Luego reenviaremos el mismo directorio a rdesktop.

Necesitaremos el paquete pmount.

 # apt-get install pmount. 

También necesitaremos crear una regla para udev que capture los dispositivos conectados y los monte.

En /etc/udev/rules.d cree el archivo 80-usbstick.rules con el siguiente contenido:

 ACTION=="add", KERNEL=="sd[az][0-9]", TAG+="systemd", ENV{SYSTEMD_WANTS}="usbstick-handler@%k" 

Ahora cree un servicio para systemd.

En / lib / systemd / system, cree el archivo usbstick-handler @ .service con el siguiente contenido:

 [Unit] Description=Mount USB sticks BindsTo=dev-%i.device After=dev-%i.device [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/bin/pmount --umask 000 --noatime -w --sync /dev/%i /media/%i ExecStop=/usr/bin/pumount /dev/%i 

En / usr / local / bin, cree el archivo de dispositivos de desmontaje con el siguiente contenido:

 #!/bin/bash for folder in /media/*; do pumount $folder echo "Unmounted $folder" done 

Asignarle los derechos para correr.

 #chmod 755 unmount-devices 

Agregue un usuario usuario al grupo plugdev para que pueda usar este script (pumount permite a los miembros de este grupo montar y desmontar dispositivos)

 # adduser user plugdev 

Reiniciar Si todo se hace correctamente, al insertar la unidad flash en el puerto USB de la mini PC, después de unos segundos, la carpeta sda1, etc., debería aparecer en el directorio / media, donde se montará la unidad flash para leer y escribir.

Los dispositivos se montan con el indicador –sync, por lo tanto, en teoría, si extrae el dispositivo cuando se completa la operación de escritura, no debería haber ningún problema con la seguridad de los datos, sin embargo, el indicador de extracción insegura permanecerá en el dispositivo.

Probamos este punto (inserte la unidad flash USB, retire la unidad flash USB, luego inserte el dispositivo en la PC con Windows y corrija los posibles errores).

Ahora inserte el dispositivo en el Pi nuevamente, asegúrese de que la carpeta / media / sda1 vuelva a aparecer.
Ejecute dispositivos de desmontaje desde debajo del usuario usuario. sda1 de / media debería desaparecer, y el dispositivo debería desmontarse de forma segura y no dar un error cuando se inserta en una PC con Windows.

5.2 Reenviar el directorio / media por RDP y proporcionar dispositivos de montaje automático


En / home / user / runrdp agregamos un argumento adicional a la línea de comando rdesktop:

 rdesktop …... -r disk:USB=/media/ 

Ahora edite /home/user/.profile , agregando una llamada a dispositivos de desmontaje.

 ... if [ -z "$DISPLAY" ] && [ $(tty) = "/dev/tty1" ]; then startx clear unmount-devices echo " 5    " sleep 5 exit fi 

Reiniciar

Ahora, si estamos trabajando en una sesión RDP, y necesitamos conectar un disco USB al Pi, simplemente lo insertamos y vamos a Mi computadora, donde vemos aproximadamente la siguiente imagen.



Podemos usar estos dispositivos libremente, aparecerán como carpetas (sda1-xx, sdb1-xx, etc.)

Si necesitamos eliminar el dispositivo, simplemente presione Ctrl + Alt + BkSp. La sesión se desconectará (por lo tanto, cualquier copia en el dispositivo debe interrumpirse, incluso si se realizó), la consola mostrará el desmontaje de los dispositivos (en este momento , todos se retiraron de forma segura) y un mensaje esperando 5 segundos antes de volver a conectarse a RDP.
Luego, después de reconectarse, puede ingresar una contraseña y continuar trabajando desde el mismo punto, pero los dispositivos conectados previamente se desmontarán. En este punto, se pueden eliminar físicamente.

Esto completa el paso de configuración.

6. Clonar el sistema a otro Rpi


6.A Si se configura de forma independiente


Si se eliminan todos los rastrillos, el dispositivo funciona de manera aceptable, entonces puede extender el ensamblaje a otros dispositivos. Si son del mismo tipo, entonces no hay necesidad de repetir el proceso desde cero.
Inserte la tarjeta SD (encontré 16 gigabytes) en la tarjeta adaptadora y colóquela en el puerto USB de Raspberry.

Si ya ha configurado el montaje automático desde la última sección, ejecute el script

 # unmount-devices 

para que desmonte la tarjeta SD recién conectada, que, por supuesto, se montó inmediatamente en / media / sdxx.

Ahora ejecute el comando lsblk y mire la lista de dispositivos:

 sda 8:0 1 14.6G 0 disk └─sda1 8:1 1 14.6G 0 part mmcblk0 179:0 0 7.4G 0 disk ├─mmcblk0p1 179:1 0 256M 0 part /boot └─mmcblk0p2 179:2 0 7.2G 0 part / 

sda es obviamente nuestra nueva tarjeta, y mmcblk0 es una tarjeta de sistema.
Ejecutar:

 dd if=/dev/mmcblk0 of=/dev/sda bs=4M 

y espere el resultado, que se espera en aproximadamente media hora (para una tarjeta de 8GB).

Después de eso, inserte en otra Raspberry, cambie el nombre de host, el nombre de usuario en el script runrdp y repita según sea necesario.

6.B Descargue la imagen terminada


Si, por supuesto, confías en mí, puedes usar la imagen preparada por mí reconfigurándola ligeramente. Cualquier marcador, herramientas de telemetría, etc. - No agregué, no es Windows 10, pero no soy Microsoft, y tampoco creo en la perspectiva económica de la minería oculta de bitcoins en RPi.
La imagen se compiló de acuerdo con las instrucciones y se compactó para su uso en una tarjeta SD con un tamaño mínimo de 2 GB chinos (deshonestos) (1977614336 bytes). Además, la parte llena de la imagen generalmente ocupa los primeros 1966080000 bytes, que deberían caber incluso en la tarjeta SD más china.

Para hacer esto:
1) Descargue el archivo en el enlace (MD5: 0B5033A9CA12BA8299340BC482111998) y descomprima el archivo de imagen.
2) Cópielo en la tarjeta SD, utilizando, por analogía, las instrucciones del párrafo 1.2.
3) Inicie el sistema, espere a que aparezca la pantalla gráfica y presione Ctrl + Alt + F2 para ir a la consola.
Inicie sesión como usuario pi, contraseña 111. Ejecute:

 $ sudo bash 

4) Siga los pasos 1.4, 2.1, asegúrese de que Internet funcione (comando ping, por ejemplo).
5) Ejecute raspi-config, vaya a Opciones avanzadas, seleccione Expandir sistema de archivos (para expandir la imagen del sistema a todo el espacio disponible en la tarjeta SD)
6) Editar / inicio / usuario / runrdp, reemplazando el nombre de host del servidor con el nombre o IP la dirección de su servidor y el nombre de usuario "usuario" con el nombre del usuario bajo el cual el operador debe conectarse al servidor.
7) Reinicie nuevamente y verifique la operación.

Conclusión


Eso es todo, gracias por su atención. Espero que esta información sea útil para alguien.
Desafortunadamente, cubrir todo en un artículo es extremadamente difícil. Si hay comentarios positivos, escribiré cómo es conveniente reenviar las impresoras desde este conjunto.

PS 12/11/2019. Gracias a los colegas (gecube, Mnemonik, mkovalevskyi, SannX) por los consejos y las ediciones. Cambios realizados:
  • se agregó un comando de apagado del protector de pantalla;
  • configuración NTP agregada;
  • con respecto al consumo de memoria en el servidor con múltiples conexiones incompletas de clientes RDP: se agregó un cuadro de mensaje al script con una pausa.

Además, acabo de probar una tarjeta sacada de RPi3 insertándola en el RPi4 Model B 1Gb recién desempaquetado. Todo funciona muy bien sin ninguna solución. En consecuencia, esta instrucción también es adecuada para RPi 4, y puede ser adecuada para otras modificaciones.

Para tal alegría, agregué una imagen descargable (consulte la sección 6.B), que puede descargar y clonar sin seguir todas las instrucciones.

Source: https://habr.com/ru/post/479504/


All Articles