Eu tenho um dispositivo embutido (Nvidia Jetson TX2 rodando Ubuntu 16.04) em uma placa portadora e preciso usar a porta serial. A porta serial na placa de transporte mapeia para ttyS0, que por padrão é de propriedade de root e pertence ao grupo tty:
crw--w---- 1 root tty 4, 64 Aug 1 13:34 ttyS0
Eu adicionei o usuário ubuntu
ao grupo tty
(que é o que eu faço login como), mas por padrão o grupo não tem acesso de leitura ao ttyS0.
sudo chmod g+r /dev/ttyS0
corrige, mas isso não persiste durante a reinicialização. Eu tentei criar várias regras do udev (99-z_setup.rules):
KERNEL=="ttyS0", NAME="ttyS0", SYMLINK+="my_tty", GROUP:="tty", MODE:="0660", OWNER:="ubuntu"
ou
KERNEL=="ttyS0", NAME="ttyS0", SYMLINK+="my_tty", GROUP:="tty", MODE:="0660"
ou
KERNEL=="ttyS0", NAME="ttyS0", SYMLINK+="my_tty", GROUP="tty", MODE="0660"
isso resulta em:
lrwxrwxrwx 1 root root 5 Aug 1 13:34 my_tty -> ttyS0
crw--w---- 1 root tty 4, 64 Aug 1 13:34 ttyS0
então ainda não consigo acessar. Eu também tentei
KERNEL=="ttyS0", ACTION=="add", PROGRAM="/usr/bin/sudo /home/ubuntu/bin/setup_tty.sh"
com setup_tty.sh
contendo
#!/bin/bash
chmod g+r /dev/ttyS0
echo "setup_tty ran" >> /home/ubuntu/bin/tty.log
Ele ecoa para o arquivo tty.log
, então sei que o script é executado, mas as permissões ainda são
crw--w---- 1 root tty 4, 64 Aug 1 13:44 ttyS0
É como se as configurações de grupo / proprietário / modo estivessem sendo ignoradas ou sobrescritas. Eu pesquisei e há muitas perguntas semelhantes, mas a resposta para elas sempre parece ser adicionar o usuário ao grupo tty
ou dialout
. Minha conta de usuário já é membro de ambos, mas não tem dados, pois, por algum motivo, por padrão, o grupo não tem permissão de leitura.
Eu verifiquei o /etc/login.defs e encontrei estas linhas:
# TTYPERM Login tty will be set to this permission.
#
# If you have a "write" program which is "setgid" to a special group
# which owns the terminals, define TTYGROUP to the group number and
# TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign
# TTYPERM to either 622 or 600.
#
# In Debian /usr/bin/bsd-write or similar programs are setgid tty
# However, the default and recommended value for TTYPERM is still 0600
# to not allow anyone to write to anyone else console or terminal
# Users can still allow other people to write them by issuing
# the "mesg y" command.
TTYGROUP tty
TTYPERM 0600
Alterei o valor de TTYPERM para 0660 e reiniciei, mas não fez diferença.
Alguma idéia de como eu posso fazer isso tty tem um modo diferente de 640 após a reinicialização?
Esta provavelmente será a resposta - eu corri journalctl | grep tty
e entre outras coisas achei essa saída:
Aug 02 11:05:45 TX2-JUDY systemd[1]: Started Serial Getty on ttyS0.
Aug 02 11:05:47 TX2-JUDY systemd[1]: [email protected]: Service hold-off time over, scheduling restart.
Aug 02 11:05:47 TX2-JUDY systemd[1]: Stopped Serial Getty on ttyS0.
Aug 02 11:05:47 TX2-JUDY systemd[1]: Started Serial Getty on ttyS0.
Aug 02 11:05:47 TX2-JUDY systemd[1]: [email protected]: Service hold-off time over, scheduling restart.
Aug 02 11:05:47 TX2-JUDY systemd[1]: Stopped Serial Getty on ttyS0.
Aug 02 11:05:47 TX2-JUDY systemd[1]: Started Serial Getty on ttyS0.
Aug 02 11:05:47 TX2-JUDY systemd[1]: [email protected]: Service hold-off time over, scheduling restart.
Aug 02 11:05:47 TX2-JUDY systemd[1]: Stopped Serial Getty on ttyS0.
Aug 02 11:05:47 TX2-JUDY systemd[1]: Started Serial Getty on ttyS0.
Aug 02 11:05:48 TX2-JUDY systemd[1]: [email protected]: Service hold-off time over, scheduling restart.
Aug 02 11:05:48 TX2-JUDY systemd[1]: Stopped Serial Getty on ttyS0.
Aug 02 11:05:48 TX2-JUDY systemd[1]: Started Serial Getty on ttyS0.
Aug 02 11:05:48 TX2-JUDY systemd[1]: [email protected]: Service hold-off time over, scheduling restart.
Aug 02 11:05:48 TX2-JUDY systemd[1]: Stopped Serial Getty on ttyS0.
Aug 02 11:05:48 TX2-JUDY systemd[1]: [email protected]: Start request repeated too quickly.
Aug 02 11:05:48 TX2-JUDY systemd[1]: Failed to start Serial Getty on ttyS0.
então parece que algum outro serviço (não tenho certeza do que é o Getty) está tentando usar o ttyS0.