У меня проблема с последовательным соединением на Linux. Я пытаюсь отправить и получить информацию между Arduino и движком Unity3D, который использует C# (моно) для открытия последовательной связи. Но я подозреваю, что это проблема с разрешениями Linux, поэтому я публикую это здесь. Я уже добавил пользователя в группу дозвона, и последовательная связь фактически работает, когда я компилирую и запускаю следующее C# с использованием mono:
using System.IO.Ports;
sp = new SerialPort("/dev/ttyACM0", 9600);
sp.Open();
Однако тот же код в Unity3D во время выполнения говорит мне:
IOException: No such file or directory
Огорчает то, что это на самом деле работает на другой Linux машине, и у меня возникают проблемы с пониманием того, какая разница может быть в том, что она не работает на другой.
Вот некоторые различия в обеих системах:
Работающим Linux является Lubuntu 19 с установкой Unity3D внутри / home, которая находится в том же разделе, что и root. Версия Unity3D - 2019.2.
Неработающая система - Linux Mint 19.3 с установкой Unity3D также в / home, но этот раздел отличается от root. Версия Unity3D - 2019.3.
Разрешения также выглядят немного иначе:
crw-rw----+ 1 root dialout 166, 0 mei 1 05:08 /dev/ttyACM0 --> Lubuntu
crw-rw---- 1 root dialout 166, 0 May 1 15:03 /dev/ttyACM0 --> Mint
Также:
getfacl /dev/ttyACM0
дает мне следующие сведения о Lubuntu:
# file: dev/ttyACM0
# owner: root
# group: dialout
user::rw-
user:myname:rw-
group::rw-
mask::rw-
other::---
и следующее на Linux Mint:
# file: dev/ttyACM0
# owner: root
# group: dialout
user::rw-
group::rw-
other::---
Кто-нибудь знает, почему в одном сценарии Unity3D не может получить доступ к / dev / ttyACM0, а в другом - ? Или какая-нибудь идея, как я мог бы узнать?
РЕДАКТИРОВАТЬ:
Я немного поигрался со следующим, чтобы проверить, что программа может читать:
string[] fileArray = Directory.GetFiles(@"/dev");
foreach(string s in fileArray)
{
Console.WriteLine(s);
}
А при запуске внутри Unity3D распознается лишь несколько файлов, только те, у которых есть «другие» разрешения на чтение. Напротив, когда я компилирую это вне единства с моно, все файлы в / dev печатаются.
Это смущает меня, разве Unity3D также не должен запускаться с моим идентификатором пользователя, и, в свою очередь, иметь доступ к разрешения для группы удаленного доступа? Unity3D запускается через приложение запуска, может ли это привести к тому, что оно не будет запущено моим пользователем?