I’m having a raspberry pi running debian linux and I have an RFID reader connected to it. The RFID reader behaves like a keyboard. Every time I scan a tag it types then number of the tag and then carriage return.
My problem is that I want to redirect the output of the RFID reader to my SSH session. That means anything that is typed to the physical keyboard of the pi should be displayed in my SSH window.
I have tried with:
cat /dev/tty0 but it wont work because the user is not logged in.
Is there a way to disable the login screen after the pi boots and then redirect all input through SSH?
One solution is changing the init system, so a getty process gets a tty and invokes your script. Your script might then initialize a named pipe (aka fifo) and redirect stdin to it.
Then you can login via ssh and read from that pipe.
I have this exact use case (raspi with RFID reader that emulates a USB keyboard).
I solved the issue by creating a new systemd unit to start my script in a screen (so I can see what’s going on by mirroring the session via ssh).
[Unit] Description=my tty1-service After=getty.target Conflictsemail@example.com [Service] Type=simple ExecStart=/usr/bin/screen -S myTTY1 /path/to/my/script StandardInput=tty-force StandardOutput=inherit StandardError=inherit [Install] WantedBy=multi-user.target
This starts your script (or program) to handle the input in a screen session named myTTY1.
Enable the service so it starts after boot:
systemctl enable my-tty1.service
Stop getty, start your service:
systemctl stop firstname.lastname@example.org systemctl start my-tty1.service
You can now connect to your screen session with
screen -x myTTY1
via ssh. Disconnect by detaching the screen with
CTRL+A, followed by