Como dar a um tty um modo diferente de 640 e tê-lo persistindo durante a reinicialização

1

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.

    
por schrödinbug 02.08.2018 / 04:27

2 respostas

0

Então, no meu caso, ttyS0 é o console serial do TX2, então tentar usá-lo da maneira que eu estava indo seria mais doloroso do que vale a pena. Parece que ttyTHS2 também está disponível e já tem as permissões necessárias. Não é uma resposta particularmente satisfatória, mas o melhor caminho a seguir.

    
por 02.08.2018 / 23:12
1

Se você estiver usando o login, consulte /etc/login.defs , entrada TTYPERM .

Aviso geral de depuração: no início do seu script, você deve usar isso para capturar a saída de erro de seus comandos, e também verificar se a entrada do dispositivo já existe.

exec >> /home/ubuntu/bin/tty.log 2>&1
    
por 02.08.2018 / 07:28