C: отобразить системное диалоговое окно c с запросом пароля на Linux - PullRequest
1 голос
/ 16 июня 2020

Я использую ОС Debian Linux, разрабатываю приложение для защиты файлов на C. Я пытаюсь запросить пароль у пользователя для аутентификации перед выполнением некоторого кода. Я использую sh, чтобы предоставить системное окно c пароля (т.е. единожды, которое появляется, когда нас просят ввести пароль root менеджером обновлений во время установки обновления или монтирования файловой системы). Я пробовал команды оболочки systemd-aask-password и dialog --passwordbox, используя popen() для запуска из моего C кода для запроса пароля. Однако обе эти команды работают в оболочке, а не при запуске через программу запуска рабочего стола.

enter image description here

Есть ли способ запросить пароль через dia; og окно, появляющееся за пределами оболочки? Aspproach может использовать shelll-скрипт, python, perl или generi c C код, чтобы я мог интегрироваться с моей существующей программой C.

1 Ответ

2 голосов
/ 16 июня 2020

Вы можете попробовать с zenity:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *popen(const char *command, const char *mode);
int pclose(FILE *stream);

int main(void)
{
    FILE *cmd;
    char result[32];

    cmd = popen("zenity --password", "r");
    if (cmd == NULL) {
        perror("popen");
        exit(EXIT_FAILURE);
    }
    if (fgets(result, sizeof(result), cmd)) {
        result[strcspn(result, "\r\n")] = 0; 
        printf("password: %s\n", result);
    }
    pclose(cmd);
    return 0;
}
...