--
Mensagem enviada para <http://groups.google.com/group/tchelinux>.
Regras de Conduta para o grupo: <http://tchelinux.org/regras>.
On 2011-06-03 Daniel Veloso wrote:
>
> No dealextreme tem conversor de usb para serial por U$ 1.99 =D
Ainda assim, o conversor vai se apresentar pro sistema como uma porta
serial, e não um teclado. Os leitores de código de barras USB funcionam
muito mais fácil exatamente por se apresentarem como teclados e
simularem a digitação do código lido. Assim o console e o X verão os
keycodes e tudo fica fácil.
No caso do leitor serial, alguma coisa tem que ler os códigos e inserir
no buffer do teclado, para que o console ou o X os interpretem como
keycodes.
Googlando por "serial barcode reader linux" eu achei alguns programas
velhos, como linbar, e um que aparenta ser mais novo, chamado
softwedge. Acho que o Uhilian vai ter que dar uma fuçada neles e
reportar aqui qual funcionou. :)
--
[[ Fábio Olivé Leite, olive, FabioOlive ]]
TcheLinux.org, OeSC-Livre.org, Chapecó, SC
ex sed lex awk yacc, e pluribus unix, amem
Ol� Uhilian,
Dependendo de como o teu programa funciona, o /dev/xxx poderia ser um
named pipe. D� uma olhada no comando mkpipe e na documenta��o sobre como
funcionam os named pipes.
http://beej.us/guide/bgipc/output/html/multipage/fifos.html
Sds,
vmm.
On 2011-06-05 Christiano F. Haesbaert wrote:
> cat /dev/ttyS0 :9600,n,8,1 > /dev/stdin
Hmmm isso está errado, pois o cat vai simplesmente escrever o que vier
da serial no stdin dele mesmo (provavelmente o terminal onde tu rodou o
comando). Mas isso vai escrever como se fosse saída, e não como se
fosse entrada pelo teclado.
$ ls -l /dev/stdin
lrwxrwxrwx. 1 root root 15 Jun 6 08:57 /dev/stdin -> /proc/self/fd/0
Pra inserir no buffer do teclado, como se o kernel tivesse lido de um
teclado físico, tem que se usar o ioctl TIOCSTI, mas mesmo esse insere
só no terminal em que foi executado. Pra inserir no X é diferente.
Talvez seja até mais fácil fazer um programa que fique lendo na serial
e copie pro clipboard do X, e aí a pessoa só precisa escanear o código
e apertar Ctrl+V onde quiser.
Abraço!
--
On 2011-06-06 Uhilian Djeimen Finger wrote:
> A opção de jogar no clipboard do X é uma boa, ainda vou continuar
> tentando, mas se realmente não tiver como, vou aderir
> a sua sugestão.
Tava quase escrevendo um programa simples em python pra fazer isso,
quando achei o comando xsel, que manipula o selection e clipboard
buffer do X. Tenta rodar esse comando em um terminal:
xsel -b -i < /dev/ttyS0
E depois escaneia algum código e aperta Ctrl+V em um editor gráfico
como o gedit. De repente só isso já resolve o que tu precisa. :)
Acho que vale mais a pena testares o xsel mesmo! Eu testei aqui usando
um named pipe ao invés da serial, e funcionou bem certinho. O que eu
escrevo no pipe vai parar no clipboard imediatamente, é só dar Ctrl+V
onde quiser.
Nesta mensagem tem um relato de um usuário com um problema bem parecido:
http://lkml.indiana.edu/hypermail/linux/kernel/0612.3/0400.html
A discussão é de dezembro de 2006, mas talvez o problema ainda exista.
Algumas sugestões que aparecem na mensagem e nas respostas são o inputattach
e o kbde:
https://wiki.archlinux.org/index.php/Serial_input_device_to_kernel_input
Talvez um deles ajude a resolver o problema.
T+
Felipe
Hmmm fato, mas e se tu ficar "abrindo" e lendo de tempos em tempos ?
Pra pegar a stdin do processo corrente ?
Bom agora ja estou chutando, não sei como funciona os /proc/self
Estranho mesmo. Acho que ele não é feito para ficar lendo em loop.
> cat /dev/ttyS0 > barcode #Gerou um arquivo com o código de barras
Diz uma coisa, quando tu rodou esse comando e depois clicou no leitor
de código de barras, o cat terminou sozinho, ou tu teve que interromper?
Se tu rodares algo assim e ler um código...
cat /dev/ttyS0 :9600,n,8,1 | hexdump -C
... ele termina sozinho e volta pro prompt do shell? E por curiosidade,
tens como postar o resultado desse comando acima aqui? :)
Talvez se possa fazer um script para ler simplesmente usando:
while :; do
cod=$(cat /dev/ttyS0 :9600,n,8,1)
# echo $cod # debug ;-)
echo $cod | xsel -b -i
done
Abraço!
On 2011-06-06 Uhilian Djeimen Finger wrote:
> Gostei do xsel Fábio...Estranho mesmo. Acho que ele não é feito para ficar lendo em loop.
> Mas ele não está capturando o valor da da serial!
Diz uma coisa, quando tu rodou esse comando e depois clicou no leitor
> cat /dev/ttyS0 > barcode #Gerou um arquivo com o código de barras
de código de barras, o cat terminou sozinho, ou tu teve que interromper?
Se tu rodares algo assim e ler um código...
cat /dev/ttyS0 :9600,n,8,1 | hexdump -C
... ele termina sozinho e volta pro prompt do shell? E por curiosidade,
tens como postar o resultado desse comando acima aqui? :)
Talvez se possa fazer um script para ler simplesmente usando:
while :; do
cod=$(cat /dev/ttyS0 :9600,n,8,1)
# echo $cod # debug ;-)
echo $cod | xsel -b -i
done
Abraço!
--
[[ Fábio Olivé Leite, olive, FabioOlive ]]
TcheLinux.org, OeSC-Livre.org, Chapecó, SC
ex sed lex awk yacc, e pluribus unix, amem
On 2011-06-06 Uhilian Djeimen Finger wrote:
> Ele não termina sozinho, fica em loop no cat, aparecendo os
> resultados após cada vez que é scaneado.
Hmm ok, então temos que quebrar ele a cada linha. Tente esse script
agora:
while :; do
read cod
echo Lido: $cod
echo $cod | xsel -b -i
done < /dev/ttyS0
Acho que esse vai ficar bala. :) O "echo Lido: $cod" é "debug" e podes
remover quando estiver em produção.
> Tive de scanear o código 2 vezes para aparecer o resultado abaixo!
>
> root@ET-01-004:~# cat /dev/ttyS0 :9600,n,8,1 | hexdump -C
> 00000000 37 38 39 31 30 32 31 30 30 32 31 32 37 0a 37 38
> |7891021002127.78|
Sim, dá pra ver que ele manda o código e um \n (0x0a), e o hexdump
ficou esperando pra completar a linha de 16 bytes. :)
On 2011-06-06 Uhilian Djeimen Finger wrote:
> Perfeito Fábio!
> Funcionou!
Massa! TcheLinux++ :)
> Vou mudar um pouco o script para não imprimir o resultado no
> terminal, e deixar ele rodando na inicialização do sistema como
> daemon.
Na verdade ele não vai funcionar na inicialização do sistema, pois ele
precisa rodar na sessão gráfica do usuário depois que ele já foi
autenticado, para que o xsel possa manipular o clipboard. Mas podes
colocar de alguma forma na inicialização da sessão do usuário, ou
colocar um ícone do tipo "Inicia Scanner" na barra do gnome/kde/sei lá.
Olá!
> Perfeito Fábio!
On 2011-06-06 Uhilian Djeimen Finger wrote:
> Funcionou!
Massa! TcheLinux++ :)
Na verdade ele não vai funcionar na inicialização do sistema, pois ele
> Vou mudar um pouco o script para não imprimir o resultado no
> terminal, e deixar ele rodando na inicialização do sistema como
> daemon.
precisa rodar na sessão gráfica do usuário depois que ele já foi
autenticado, para que o xsel possa manipular o clipboard. Mas podes
colocar de alguma forma na inicialização da sessão do usuário, ou
colocar um ícone do tipo "Inicia Scanner" na barra do gnome/kde/sei lá.
--
[[ Fábio Olivé Leite, olive, FabioOlive ]]
TcheLinux.org, OeSC-Livre.org, Chapecó, SC
ex sed lex awk yacc, e pluribus unix, amem
On 2011-06-06 Fabio Olive Leite wrote:
>
> while :; do
> read cod
> echo $cod | xsel -b -i
> done < /dev/ttyS0
Eu tava pesquisando aqui, pois sabia que tinha que existir uma maneira
pronta já de simular a digitação na interface gráfica. E tem mesmo,
instale o pacote xvkbd, e use a opção "-text" do xvkbd naquele script.
Fica assim:
while :; do
read cod
xvkbd -text $cod 2>/dev/null
done < /dev/ttyS0
Esse vai ler uma linha por vez e enviar essa linha como se fosse um
teclado usando o xvkbd. Aqui o xvkbd deu uns errinhos bestas quando
rodei, então achei melhor jogar os erros pro /dev/null. :)
Testa e comenta aí, Uhilian! :)
Demorei um pouquinho^W muito, mas finalmente entendi, realmente, minha
suposição foi estúpida.