Linux小玩意之 gnome桌面显示的 "Software Updates Available" 来自那里?

在gnome桌面显示的 “Software Updates Available” 来自那里?

1. 消息来自哪里?

  • 其实gnome里面有个小应用, 叫”gnome-software” 它来给我们发了这个通知, 里面有段这样的信息.
    1
    2
    title = _("Software Updates Available");
    body = _("Important OS and application updates are ready to be installed");

    2. “gnome-software”又是怎么跑起来的?

  • 我们可以通过xdg的配置,配置应用跟随桌面环境自动启动. 例如 gnome,kde,xfce,lxde 等都可以支持xdg标准. 应用安装好后, 将配置文件放在”/etc/xdg/autostart/“下面. 比如这里的”gnome-software”, 对应的配置文件”gnome-software-service.desktop”
    1
    2
    3
    4
    5
    6
    [Desktop Entry]
    Type=Application
    Name=GNOME Software
    Exec=/usr/bin/gnome-software --gapplication-service
    OnlyShowIn=GNOME;Unity;
    NoDisplay=true

    3. 消息怎么输出,根源在那里?

  • 这个小应用以”yum.repos.d”作为参考, 通过一系列函数,定时器对当前系统安装的包的metadata信息与repos检测到的作对比. 下列的一些函数被调用了.
    1
    2
    3
    4
    5
    6
    gs_update_monitor_init (GsUpdateMonitor *monitor)
    g_timeout_add_seconds (60, check_updates_on_startup_cb, monitor);
    check_updates_on_startup_cb (gpointer data)
    restart_updates_check (monitor);
    check_updates (monitor);
    g_timeout_add_seconds (3600, check_hourly_cb,monitor);

    4. 用什么样的区间作检查呢?

  • 通过GsUpdateMonitor结构, 里面有检查区间成员; 开机之后,通过调用g_timeout_add_seconds (60, check_updates_on_startup_cb, monitor), 60秒做第一次检查; 之后每个小时,之后每天
    1
    2
    3
    guint		 check_startup_id;
    guint check_hourly_id;
    guint check_daily_id;