Я пытаюсь изучить низкоуровневое графическое программирование на Linux с использованием C. Я довольно плохо знаком с Linux и C. Я пытаюсь найти наиболее ответственный способ управления разрешениями для /dev/fb0
в моем коде. .
мой код:
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
int main(){
int fb_fd = 0;
// Open the file for reading and writing
fb_fd = open("/dev/fb0", O_RDWR);
if (fb_fd == -1) {
perror("Error: cannot open framebuffer device");
exit(1);
}
printf("The framebuffer device was opened successfully.\n");
struct fb_fix_screeninfo finfo;
struct fb_var_screeninfo vinfo;
//Get variable screen information
ioctl(fb_fd, FBIOGET_VSCREENINFO, &vinfo);
//Get fixed screen information
ioctl(fb_fd, FBIOGET_FSCREENINFO, &finfo);
printf("vinfo.bits_per-pixel: %d\n",vinfo.bits_per_pixel);
close(fb_fd);
return(0);
}
Моя проблема: программа работает только с использованием sudo ./my_program
, в противном случае она не может открыть буфер кадров (разрешение запрещено). Я не уверен, как обычно управляются разрешения для /dev/fb0
при написании программного обеспечения, предназначенного для рисования в буфере кадров. Как мне «дать разрешение» моей программе запускаться обычным пользователем без специальных разрешений?
Редактировать: по запросу, некоторые данные консоли:
настройка режима и разрешений
~/learning_c/game_0$ ls -l /dev/fb0
crw-rw---- 1 root video 29, 0 Oct 28 08:01 /dev/fb0
~/learning_c/game_0$ ls -l ./bin/game
-rwxrwxr-x 1 logan logan 15160 Oct 29 21:12 ./bin/game
~/learning_c/game_0$ chgrp video ./bin/game
chgrp: changing group of './bin/game': Operation not permitted
~/learning_c/game_0$ sudo chgrp video ./bin/game
[sudo] password for logan:
~/learning_c/game_0$ ls -l ./bin/game
-rwxrwxr-x 1 logan video 15160 Oct 29 21:12 ./bin/game
~/learning_c/game_0$ sudo chmod -v g+s ./bin/game
mode of './bin/game' changed from 0775 (rwxrwxr-x) to 2775 (rwxrwsr-x)
~/learning_c/game_0$ ls -l ./bin/game
-rwxrwsr-x 1 logan video 15160 Oct 29 21:12 ./bin/game
попробуй запустить ./bin/game
~/learning_c/game_0$ ./bin/game
Error: cannot open framebuffer device: Permission denied
logan@logan-Aspire-5560:~/learning_c/game_0$ sudo ./bin/game
[sudo] password for logan:
The framebuffer device was opened successfully