如何在gnome 3.28 Ubuntu 18.04中的javascript中获取用户个人资料图像

时间:2018-11-14 02:31:53

标签: javascript ubuntu-18.04 gnome-shell-extensions

我正在开发gnome扩展,其中有一个带有menuitems的弹出菜单。其中一个菜单项称为“注销”。我设法在“注销”旁边显示用户的真实姓名。此代码:

    let username = GLib.get_real_name();
                .........
                .........
    item = new PopupMenu.PopupMenuItem(_(list[x].text) + username);

Log out menuitem

现在我想在真实姓名旁边显示用户配置文件图像。我尝试了此代码,但是它不起作用:

    let usename= GLib.get_user_name();
    let user = AccountsService.UserManager.get_default().get_user(username);
    let iconpath = user.get_icon_file();
    let icon = Gio.icon_new_for_string(iconpath);
    Icon = new St.Icon(icon);
    boxicon = new St.BoxLayout();
    boxicon.add(Icon);

似乎“ iconpath”为空。如何获取用户个人资料图像并将其显示在菜单中。 预先感谢。

1 个答案:

答案 0 :(得分:0)

gnome-shell中有很多JavaScript,它们已经被编写为易于重用。奖励,您将自动获得对代码进行的错误修正和性能改进(如果发生的话)。

我建议您重复使用,或至少查看Avatar class in ui/userWidget.js。不仅已经编写了代码,而且还可以使头像保持最新状态,任何具有自定义样式的GNOME Shell主题也可能会自动运行。

您可以像这样使用此类:

spring-data-redis

其中还有用于用户名标签的其他类,以及将两者包装在一起的父类。请注意带有下划线的const UserWidget = imports.ui.userWidget; let user = AccountsService.UserManager.get_default().get_user(username); let avatar = new UserWidget.Avatar(user); let boxicon = new St.BoxLayout(); // Notice that UserWidget.Avatar is a container class for the actual actor boxicon.add_child(avatar.actor); 前缀的类或函数,因为这是将事物标记为“私有”或内部的,并且可以随时更改而无需另行通知的常见方式。

编辑

此外,如果您不使用最新版本,也不使用最新版本,请使用GitLab的下拉菜单选择发布的分支,或查看文件的历史记录以查看是否有重要更改。