ttyUSB* -как получить доступ из программы Lazarus?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

ttyUSB* -как получить доступ из программы Lazarus?

Сообщение bvn123 » 04.01.2021 12:08:53

Добрый день,

как разрешить доступ к устройству ttyUSB* в программе Lazarus без вмешательства пользователя (без ввода пароля и без запуска терминала)?

Я использую USB-UART адаптер; из программы Lazarus обращаюсь к нему как к устройству с именем ttyUSB0.
Для доступа к ttyUSB0 из программы предварительно требуется
-подключить устройство к USB
-открыть терминал и ввести две строки: команду доступа и пароль,
получается это также и в одной строке:
Код: Выделить всё
  echo "1234" | sudo -S 666 /dev/ttyUSB*

После отключения-подключения адаптера доступ необходимо обеспечивать снова.

Пробовал следующее:
Код: Выделить всё
procedure TForm1.btAccessClick(Sender: TObject);
  var
    proc: TProcess;
begin
  proc:=TProcess.Create(nil);
  try
    proc.Options:=[poUsePipes,poStderrToOutPut];
    proc.CommandLine:='/bin/echo "b747" | sudo -S /bin/chmod 666 /dev/ttyUSB*';
    proc.Execute;
  finally proc.Free; end;
end;


Пробовал также без указания пути /bin/ - не работает.

Интересует пример или ссылка на решение, или скорректированный приведенный выше код.

Общие соображения, например, попробовать RunProcess() или /bin/bash, не требуются.

Спасибо.
bvn123
незнакомец
 
Сообщения: 3
Зарегистрирован: 04.01.2021 11:37:08

Re: ttyUSB* -как получить доступ из программы Lazarus?

Сообщение Vadim » 04.01.2021 15:26:43

Видимо у Вас это должен быть модем? :-)
С USB-модемами я никогда не работал, но вот к любые USB-устройствам без прав root'а не обратишься. Когда я делал программку для работы с RFID-антенной, то пришлось программу разделить на 2 части:
1) Клиентская часть - работает от обычного пользователя;
2) Часть системная - запускается как демон от root'а, работает непосредственно с антенной.
Канал обмена информации между этими двумя частями - на Ваше усмотрение. Моё решение тут Вам вряд ли подойдёт.
Возможно Вам поможет включение пользователя в группу "dialout". Далее - посылка соответствующих команд в девайс.
Vadim
долгожитель
 
Сообщения: 3937
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: ttyUSB* -как получить доступ из программы Lazarus?

Сообщение Alex2013 » 04.01.2021 16:37:51

В порядке "мозгового штурма":
1 А просто "открыть устройство как текстовый файл" на запись не выходит? (Да это может потребовать рут или нужных прав доступа, но проблема решается )
2 proc.CommandLine:=' echo psw | sudo -S " echo КОМАНДА>/dev/ttyUSB" '; но это не точно ...
Alex2013
долгожитель
 
Сообщения: 1961
Зарегистрирован: 03.04.2013 11:59:44

Re: ttyUSB* -как получить доступ из программы Lazarus?

Сообщение bvn123 » 04.01.2021 18:04:35

Спасибо за ответы,
пока решение, может, и не самое простое, подсказали здесь:
https://forum.lazarus.freepascal.org/index.php/topic,52749.0.html
, порекомендовав такую ссылку на статью:
https://techref.patronweb.com/io/2019/03/30/udev-rules-usb-io-serial.html
Я предполагал, что вопрос стандартный, т.к. подключается один из расхожих адаптеров (мостов) USB-UART на базе CP2102 и ожидал простого решения, которым, если и придется напрягать пользователей, то минимально.
bvn123
незнакомец
 
Сообщения: 3
Зарегистрирован: 04.01.2021 11:37:08

Re: ttyUSB* -как получить доступ из программы Lazarus?

Сообщение olegy123 » 05.01.2021 12:40:57

Вместо "/bin/chmod 666 /dev/ttyUSB" проще добавить пользователя с которого запускается программа в группу которая может работать с COM портом, тогда вы избаитесь каждый раз давать порту разрешения всем, в debian/ubuntu это группа dialout, в какую группу следует засунуть пользователя можно узнать просто ls -l /dev/ttyUSB*
ls -l /dev/ttyS*
crw-rw---- 1 root dialout 4, 64 ноя 20 14:10 /dev/ttyS0
crw-rw---- 1 root dialout 4, 65 ноя 20 14:10 /dev/ttyS1
crw-rw---- 1 root dialout 4, 66 ноя 20 14:10 /dev/ttyS2
crw-rw---- 1 root dialout 4, 67 ноя 20 14:10 /dev/ttyS3


либо это можно принудительно дать нужные разрешения через udev тут можно даже прикрутить программу к автозапуску при подключении нужного оборудования

/dev/ttyUSB[0-3] должен иметь индекс соответственно подключать также по индексу.

Ничем другим отличий нет от Windows COM[0-3] порта
olegy123
долгожитель
 
Сообщения: 1613
Зарегистрирован: 25.02.2016 12:10:20

Re: ttyUSB* -как получить доступ из программы Lazarus?

Сообщение bvn123 » 06.01.2021 21:21:53

Да,
о прописывании пользователя в группу dialout на форуме по ссылке 1 выше,
о прописывании в udev в статье (ссылка 2 выше),
оба варианта работают,
1-й проще, нужен ввод пароля,
во втором потребовались права админа с вводом пароля для размещения файла с правилом в папке etc/udev/rules.d
bvn123
незнакомец
 
Сообщения: 3
Зарегистрирован: 04.01.2021 11:37:08


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru