Файл libegl: разрешения. Пытается получить доступ к /dev/dri/card0.

Вопрос или проблема

Я создаю EGL-контекст с помощью DRM.

Информация о файловой системе следующая:

ls -l /dev/dri
lrwxrwxr-x  1 root wheel  8 Jan  7 05:15 card0 -> ../drm/0
lrwxrwxr-x  1 root wheel 10 Jan  7 05:15 renderD128 -> ../drm/128
ls -l /dev/drm
crw-rw----  1 root video  0x6b Jan  6 17:28 0
getfacl /dev/dri
# file: /dev/dri
# owner: root
# group: wheel
user::r-x
group::rwx
other::r-x
getfacl /dev/dri/card0
# file: /dev/dri/card0
# owner: root
# group: video
user::rw-
group::rw-
other::---
yv@yv-lap:~/src/x11 $ groups yv
yv wheel video

Я получаю ошибки разрешения доступа к файлу libegl:

libEGL warning: failed to open /dev/dri/renderD128: Permission denied
libEGL warning: failed to open /dev/dri/card0: Permission denied

Фрагмент кода:

181│ #define SKIP_EGL_DEVICE(i, s) { EGL_PRINT_ERROR; status = 3; fprintf(stderr, " \t! egl: GPU {%u} skip: %s\n", i, s); goto l_end_loop_gpus; }
182│
183│   for(unsigned i = 0; i < (unsigned)n_devices_total; ++i) {
184│    dpy = fn_get_platform_display(EGL_PLATFORM_DEVICE_EXT, devices[i], 0);
185│    if(EGL_NO_DISPLAY == dpy) {
186│     SKIP_EGL_DEVICE(i, "can't get platform display")
187│    }
188│ 
189│    printf(" i egl: GPU {%u}:\n", i);
190│    if (!eglInitialize(dpy, &maj, &min)) { /* file permission errors here */
191├───> SKIP_EGL_DEVICE(i, "eglInitialize()")
192│    }

Я являюсь членом всех необходимых групп, как видно выше. Я не уверен насчёт группы video, потому что я уже в группе wheel.

Почему возникают ошибки доступа?

ОБНОВЛЕНИЕ

Переключение на root устраняет ошибки.

обновление по комментарию

ещё не вышел из системы. вывод команды id следующий:

yv@yv-lap:~/src/x11 $ id yv
uid=1001(yv) gid=1001(yv) groups=1001(yv),0(wheel),44(video)

Забавно, выход и повторный вход помогли. Что за этим стоит?

Ответ или решение

Ваша ситуация связана с проблемами доступа к устройствам DRM через библиотеку libEGL, когда ваша программа пытается создавать контекст EGL с использованием DRM (Direct Rendering Manager).

Анализ проблемы

Судя по предоставленной информации, причины возникновения ошибки, а именно отказ в доступе к файлам /dev/dri/renderD128 и /dev/dri/card0, связаны с управлением прав доступа к устройствам. Давайте разберемся в причинах и способах решения.

Причины отказа в доступе

  1. Правильная принадлежность к группе:

    • Ваша учетная запись пользователя "yv" состоит в группе "video", которая имеет права на чтение и запись устройств DRM. Это подтверждается выводом команды id yv.
  2. Необходимость в обновлении сеанса:

    • Вы упомянули, что после выхода из системы и повторного входа проблема исчезла. Это указывает на то, что изменения в группах пользователя вступают в силу только после обновления сеанса. Без выхода и повторного входа операционная система продолжала использовать старые права доступа.
  3. Проверка символьных ссылок:

    • Символьные ссылки /dev/dri/card0 и /dev/dri/renderD128 ведут к файлам устройств в /dev/drm, что подтверждается выводом ls -l. Это корректные символические связи, однако важно, чтобы доступ был также предоставлен к целевым устройствам.

Решение проблемы

  1. Обновите сеанс пользователя:

    • После добавления пользователя в группу "video", требуется выйти из сеанса и заново войти, чтобы изменения в правах доступа вступили в силу.
  2. Диагностика прав доступа:

    • Убедитесь, что файлы устройств в /dev/drm имеют корректные права доступа:
      ls -l /dev/drm
    • Права должны разрешать чтение и запись для группы "video".
  3. Проверка конфигурации системы:

    • Убедитесь, что ваша система корректно настраивает группы и права доступа для устройств DRM. Если проблема повторится, возможно стоит проверить настройки udev и наличие соответствующих правил.

Заключение

Ошибка доступа к устройствам /dev/dri и, как следствие, отказ libEGL, связана с несоответствием прав доступа, вызванным отсутствием обновления сеанса после правок групп. Правильный выход и повторный вход в систему позволяют применить изменения, предотвращая дальнейшие ошибки. Это показывает важность обновления сеанса пользователя в Unix-подобных системах после изменения групп.

Оцените материал
Добавить комментарий

Капча загружается...