The Smart Scopes technology implies submitting search queries online for them to be processed by the Smart Scopes Server from Canonical.
Is any personal or sensitive data collected as part of the Smart Scopes Server?
application-developmentscopes
The Smart Scopes technology implies submitting search queries online for them to be processed by the Smart Scopes Server from Canonical.
Is any personal or sensitive data collected as part of the Smart Scopes Server?
find /usr/share/unity/scopes/ -name \*.scope -printf "%P "|sed -es':/:-:g'
lists you all locally installed scopes.
With
gsettings set com.canonical.Unity.Lenses disabled-scopes "[$(find /usr/share/unity/scopes/ -name \*.scope -printf "'%P',"|sed -es':/:-:g' -e's/,$//')]"
you can disable all, so you can just enable the ones you want. You need to have at least applications-scopes.scope
enabled to use the Dash to manage Scopes.
Well, it is really simpler then I expected. There is no specific API for it. Because it is just a GSimpleActionGroup & with corresponding GMenu's exported through DBus then Unity is told about their presence using declaration file with same name put in /usr/share/unity/indicators/
. No need for any other library.
Here a very small C language example:
Get a copy of tests/indicator-test-service.c
from libindicator
source
apt-get source libindicator
cp libindicator-*/tests/indicator-test-service.c .
cp libindicator-*/tests/com.canonical.indicator.test* .
indicator-test-service.c no changes
#include <gio/gio.h>
typedef struct
{
GSimpleActionGroup *actions;
GMenu *menu;
guint actions_export_id;
guint menu_export_id;
} IndicatorTestService;
static void
bus_acquired (GDBusConnection *connection,
const gchar *name,
gpointer user_data)
{
IndicatorTestService *indicator = user_data;
GError *error = NULL;
indicator->actions_export_id = g_dbus_connection_export_action_group (connection,
"/com/canonical/indicator/test",
G_ACTION_GROUP (indicator->actions),
&error);
if (indicator->actions_export_id == 0)
{
g_warning ("cannot export action group: %s", error->message);
g_error_free (error);
return;
}
indicator->menu_export_id = g_dbus_connection_export_menu_model (connection,
"/com/canonical/indicator/test/desktop",
G_MENU_MODEL (indicator->menu),
&error);
if (indicator->menu_export_id == 0)
{
g_warning ("cannot export menu: %s", error->message);
g_error_free (error);
return;
}
}
static void
name_lost (GDBusConnection *connection,
const gchar *name,
gpointer user_data)
{
IndicatorTestService *indicator = user_data;
if (indicator->actions_export_id)
g_dbus_connection_unexport_action_group (connection, indicator->actions_export_id);
if (indicator->menu_export_id)
g_dbus_connection_unexport_menu_model (connection, indicator->menu_export_id);
}
static void
activate_show (GSimpleAction *action,
GVariant *parameter,
gpointer user_data)
{
g_message ("showing");
}
int
main (int argc, char **argv)
{
IndicatorTestService indicator = { 0 };
GMenuItem *item;
GMenu *submenu;
GActionEntry entries[] = {
{ "_header", NULL, NULL, "{'label': <'Test'>,"
" 'icon': <'indicator-test'>,"
" 'accessible-desc': <'Test indicator'> }", NULL },
{ "show", activate_show, NULL, NULL, NULL }
};
GMainLoop *loop;
indicator.actions = g_simple_action_group_new ();
g_simple_action_group_add_entries (indicator.actions, entries, G_N_ELEMENTS (entries), NULL);
submenu = g_menu_new ();
g_menu_append (submenu, "Show", "indicator.show");
item = g_menu_item_new (NULL, "indicator._header");
g_menu_item_set_attribute (item, "x-canonical-type", "s", "com.canonical.indicator.root");
g_menu_item_set_submenu (item, G_MENU_MODEL (submenu));
indicator.menu = g_menu_new ();
g_menu_append_item (indicator.menu, item);
g_bus_own_name (G_BUS_TYPE_SESSION,
"com.canonical.indicator.test",
G_BUS_NAME_OWNER_FLAGS_NONE,
bus_acquired,
NULL,
name_lost,
&indicator,
NULL);
loop = g_main_loop_new (NULL, FALSE);
g_main_loop_run (loop);
g_object_unref (submenu);
g_object_unref (item);
g_object_unref (indicator.actions);
g_object_unref (indicator.menu);
g_object_unref (loop);
return 0;
}
com.canonical.indicator.test modified to add lock & greeter mode
[Indicator Service]
Name=indicator-test
ObjectPath=/com/canonical/indicator/test
[desktop]
ObjectPath=/com/canonical/indicator/test/desktop
[desktop_greeter]
ObjectPath=/com/canonical/indicator/test/desktop
[desktop_lockscreen]
ObjectPath=/com/canonical/indicator/test/desktop
com.canonical.indicator.test.service remove .in
postfix from filename and change the executable path
[D-BUS Service]
Name=com.canonical.indicator.test
Exec=/usr/lib/x86_64-linux-gnu/indicator-test/indicator-test-service
Compile it
gcc -o indicator-test-service indicator-test-service.c `pkg-config --cflags --libs gtk+-3.0`
Manual Installation
sudo su
mkdir /usr/lib/x86_64-linux-gnu/indicator-test/
cp indicator-test-service /usr/lib/x86_64-linux-gnu/indicator-test/
cp com.canonical.indicator.test /usr/share/unity/indicators/
cp com.canonical.indicator.test.service /usr/share/dbus-1/services/
Configuration for Greeter, override the default indicators list
90_unity-greeter.gschema.override
[com.canonical.unity-greeter]
indicators=['ug-accessibility', 'com.canonical.indicator.keyboard', 'com.canonical.indicator.session', 'com.canonical.indicator.datetime', 'com.canonical.indicator.power', 'com.canonical.indicator.sound', 'com.canonical.indicator.test', 'application']
Install
cp 90_unity-greeter.gschema.override /usr/share/glib-2.0/schemas/
glib-compile-schemas /usr/share/glib-2.0/schemas/
Test
sudo service lightdm restart
DBus service is troublesome, if you want user to be able to close application anytime. It is better to use autostart instead, like default indicators do.
I have uploaded ready files here:
https://github.com/sneetsher/mysystemindicator_minimum
and a modified copy here:
https://github.com/sneetsher/mysystemindicator
Where I have tried different menu for different mode. It could be installed and tested quickly.
This seems too simple and can be easily ported to any other language that have support for GIO Gnome lib (including DBus). As I'm looking for python, I may add it later.
This is not full standalone indicator as the one above, it is just a share lib plugin, similar to libappmenu.so
& libprintersmenu.so
(application menu & printer indicator). It could be shown only in regular user session & greeter (Not on lock screen).
I couldn't make it work in my current machine, but I did before. Here the steps, may be I'm missing something.
Using same source above of libindicator
test/libdummy-indicator-*.c
are examples (simple & visible the ones show up on the panel)
Compile
./autogen.sh
make
Install
sudo cp tests/.libs/libdummy-indicator-visible.so /usr/lib/indicators3/7/libdummy.so
Configure to show in greeter screen
90_unity-greeter.gschema.override use same name without lib
prefix and .so
extension.
[com.canonical.unity-greeter]
indicators=['ug-accessibility', 'com.canonical.indicator.keyboard', 'com.canonical.indicator.session', 'com.canonical.indicator.datetime', 'com.canonical.indicator.power', 'com.canonical.indicator.sound', 'application', 'dummy']
Install
cp 90_unity-greeter.gschema.override /usr/share/glib-2.0/schemas/
glib-compile-schemas /usr/share/glib-2.0/schemas/
Best Answer
The short answer is no.
Thes Smart Scopes Server collects aggregated statistics related to search queries and doesn’t collect any data to identify any user. Only the search query is stored on the server.
Users are not tracked in any way: there isn't a notion of anyone’s search history and queries and feedback cannot be correlated to a user. As a consequence, Smart Scopes search results are not personalized. If collecting anonymous search queries is still a concern, any scope or entire communication with Smart Scopes Server can be easily disabled via the user’s Privacy Settings dialog.
If a scope requires personal information to work (such as account information) then it will only be able to run on the client but never on the server.
The Smart Scopes spec contains information about all the data that is sent to the server.