Gstreamer не работает с другими пользователями, кроме mendel

У меня есть доска разработчика Google Coral. Я хочу, чтобы подключаемый модуль gstreamer работал с пользователем, отличным от пользователя по умолчанию mendel. Я выполнил следующие шаги и столкнулся с проблемой.

  1. Установил gstreamer с помощью следующей команды.
    sudo apt-get install -y gstreamer1.0-plugins-bad gstreamer1.0-plugins-good python3-gst-1.0 python3-gi

  2. Затем клонировал пользователя mendel в следующем скрипте.

SRC=$1
DEST=$2

SRC_GROUPS=$(id -Gn ${SRC} | sed "s/${SRC} //g" | sed "s/ ${SRC}//g" | sed "s/ /,/g")
SRC_SHELL=$(awk -F : -v name=${SRC} '(name == $1) { print $7 }' /etc/passwd)

useradd --groups ${SRC_GROUPS} --shell ${SRC_SHELL} --create-home ${DEST}
passwd ${DEST}


3. Если мы сохраним вышеуказанный файл под именем clone-user.sh. Затем используйте следующую команду:
./clone-user.sh mendel user2.

  1. Если мы переключимся на пользователя, созданного выше, используя sudo su - user2, и запустим команду gst-launch-1.0 videotestsrc ! waylandsink. Тогда gstreamer не будет работать.

  2. Где команда gst-launch-1.0 videotestsrc ! waylandsink работает, если мы используем пользователя по умолчанию. В моем случае это mendel.

Я попробовал ссылку . Но это тоже не работает.


person Deepanshu Yadav    schedule 19.02.2020    source источник
comment
Определите GST_DEBUG=3 переменную среды или добавьте -v параметры командной строки в gst-launch-1.0 см. отладочные сообщения.   -  person RSATom    schedule 19.02.2020
comment
Я нашел решение в этом документе.   -  person Deepanshu Yadav    schedule 19.02.2020
comment
Но файл сокета, созданный в /run/user/1000, также должен быть создан для нового пользователя в каталоге /run/user/‹id_of_new_user› .   -  person Deepanshu Yadav    schedule 19.02.2020


Ответы (1)


Вы можете получить идентификатор нового пользователя с помощью:

$ echo $UID

скопируйте файлы из /run/user/1000 в новый идентификатор пользователя:

$ cp -r /run/user/1000 /run/user/$UID

владеть им:

$ sudo chown username:username -R /run/user/$UID/*

установить XDG_RUNTIME_DIR:

$ export XDG_RUNTIME_DIR=/run/user/1000

Я могу сделать это и запустить edgetpu_classify и gst-launch-1.0 как с Mendel, так и с root.

person Nam Vu    schedule 19.02.2020
comment
Я согласен с вашим решением, но если присмотреться, первые три строки на самом деле не требуются. Поскольку вы устанавливаете XDG_RUNTIME_DIR как /run/user/1000. Этот подход указан в загруженном документе. На самом деле ошибка возникает, когда мы устанавливаем XDG_RUNTIME_DIR как /run/user/$UID. Я также использовал мягкую ссылку на файл сокета, используя ln -s /run/user/1000/wayland-0 /run/user/1003/wayland-0 . Этот подход работает. Приведенный выше файл сокета дает сбой при прямом копировании из /run/user/1000/ - person Deepanshu Yadav; 20.02.2020