3

I am searching for a method with which to determine whether a Gnome keyring is unlocked; primarily, the default one. I got very close using secret-tool, but if a keyring is locked, it still presents a dialog.

I do not want to ask the user to unlock the keyring.

Either it is locked, or it is unlocked, end of story. The intent is to avoid the user ever having to know or think about keyrings. If the keyring is locked, do a thing (delete all keyrings), if a keyring is unlocked, do another thing (proceed as normal), all silently in the background.

So the question is, which tool actually allows that sort of check? I've got the rest of the script in place, I only need a silent replacement of secret-tool.

1

Gnome Keyring Tools (i made some little tools to check and control gnome keyring)

Sources & Release : https://github.com/intika/gnome-keyring-tools

Lock Keyring - gkey-lock.c

#include <stdio.h>
#include <gnome-keyring.h>

int main() {
    GnomeKeyringResult lock_result = gnome_keyring_lock_all_sync();
    if (lock_result == GNOME_KEYRING_RESULT_OK) {
        printf("Successfully locked\n");
        return 0;
    } else {
        printf("Error locking keyring: %d\n", lock_result);
        return 1;
    }
}

Unlock Keyring - gkey-unlock.c

#include <stdio.h>
#include <gnome-keyring.h>

int main() {
    GnomeKeyringResult lock_result = gnome_keyring_unlock_sync(NULL,NULL);
    if (lock_result == GNOME_KEYRING_RESULT_OK) {
        printf("Successfully unlocked\n");
        return 0;
    } else {
        printf("Error unlocking keyring: %d\n", lock_result);
        return 1;
    }
}

Check Keyring - gkey-check.c

#include <stdio.h>
#include <gnome-keyring.h>

int main() {

  GnomeKeyringInfo *info;
  GnomeKeyringResult gkr;

  gkr = gnome_keyring_get_info_sync(NULL, &info);
  if (gkr != GNOME_KEYRING_RESULT_OK) {
    printf("error\n");
    return -1;
  }
  if (gnome_keyring_info_get_is_locked(info)) {
    printf("locked\n");
    return 0;
  }
  else {
    printf("unlocked\n");
    return -1;
  }
  gnome_keyring_info_free(info);

}

How to build

cc gkey-lock.c -o gkey-lock -Wall -I/usr/include/gnome-keyring-1 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -lgnome-keyring -lglib-2.0
cc gkey-unlock.c -o gkey-unlock -Wall -I/usr/include/gnome-keyring-1 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -lgnome-keyring -lglib-2.0
cc gkey-check.c -o gkey-check -Wall -I/usr/include/gnome-keyring-1 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -lgnome-keyring -lglib-2.0

Bonus - Check With Python - gkey-check.py

import gnomekeyring
print gnomekeyring.get_info_sync(gnomekeyring.get_default_keyring_sync()).get_is_locked()

Bonus II - Monitor Gnome Keyring State In KDE Taskbar/Tray

I made gkey-check return error when its unlocked in addition to the string unlocked i could then use KDE Server Status widget to monitor keyring state locked/unlocked with a visual icon :) with the command gkey-check

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.