9745e97e14
When connecting to virtual machines with usb-device redirection, such as Spice enabled vms, automount may get in the way. Specifically if auto-usbredir is enabled in the vm-viewer, then the usbredir code and the automount code race for who gets to the device first. If the automount code wins the race this is a problem, since usbredir causes a device-disconnect (iow the usb mass storage driver sees an unplug), so in the end usbredir always wins, and we end up with a non clean potentially corrupt filesystem. Also see: https://bugzilla.redhat.com/show_bug.cgi?id=812972 There for the need exists to be able to inhibit gnome-shell's automounting, since all other inhibits run through gnome-session, I've chosen to do the same for the automount-inhibiting. I've also submitted a patch to gnome-session to reserve flag value 16 for this, see bug 678595. This patch adds support to gnome-shell to honor this new inhibit flag. Signed-off-by: Hans de Goede <hdegoede@redhat.com> https://bugzilla.gnome.org/show_bug.cgi?id=678597
72 lines
2.2 KiB
JavaScript
72 lines
2.2 KiB
JavaScript
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
|
|
const Gio = imports.gi.Gio;
|
|
const Lang = imports.lang;
|
|
const Signals = imports.signals;
|
|
|
|
const PresenceIface = <interface name="org.gnome.SessionManager.Presence">
|
|
<method name="SetStatus">
|
|
<arg type="u" direction="in"/>
|
|
</method>
|
|
<property name="status" type="u" access="readwrite"/>
|
|
<signal name="StatusChanged">
|
|
<arg type="u" direction="out"/>
|
|
</signal>
|
|
</interface>;
|
|
|
|
const PresenceStatus = {
|
|
AVAILABLE: 0,
|
|
INVISIBLE: 1,
|
|
BUSY: 2,
|
|
IDLE: 3
|
|
};
|
|
|
|
var PresenceProxy = Gio.DBusProxy.makeProxyWrapper(PresenceIface);
|
|
function Presence(initCallback, cancellable) {
|
|
return new PresenceProxy(Gio.DBus.session, 'org.gnome.SessionManager',
|
|
'/org/gnome/SessionManager/Presence', initCallback, cancellable);
|
|
}
|
|
|
|
// Note inhibitors are immutable objects, so they don't
|
|
// change at runtime (changes always come in the form
|
|
// of new inhibitors)
|
|
const InhibitorIface = <interface name="org.gnome.SessionManager.Inhibitor">
|
|
<method name="GetAppId">
|
|
<arg type="s" direction="out" />
|
|
</method>
|
|
<method name="GetReason">
|
|
<arg type="s" direction="out" />
|
|
</method>
|
|
</interface>;
|
|
|
|
var InhibitorProxy = Gio.DBusProxy.makeProxyWrapper(InhibitorIface);
|
|
function Inhibitor(objectPath, initCallback, cancellable) {
|
|
return new InhibitorProxy(Gio.DBus.session, 'org.gnome.SessionManager', objectPath, initCallback, cancellable);
|
|
}
|
|
|
|
// Not the full interface, only the methods we use
|
|
const SessionManagerIface = <interface name="org.gnome.SessionManager">
|
|
<method name="Logout">
|
|
<arg type="u" direction="in" />
|
|
</method>
|
|
<method name="Shutdown" />
|
|
<method name="CanShutdown">
|
|
<arg type="b" direction="out" />
|
|
</method>
|
|
<method name="IsInhibited">
|
|
<arg type="u" direction="in" />
|
|
<arg type="b" direction="out" />
|
|
</method>
|
|
<signal name="InhibitorAdded">
|
|
<arg type="o" direction="out"/>
|
|
</signal>
|
|
<signal name="InhibitorRemoved">
|
|
<arg type="o" direction="out"/>
|
|
</signal>
|
|
</interface>;
|
|
|
|
var SessionManagerProxy = Gio.DBusProxy.makeProxyWrapper(SessionManagerIface);
|
|
function SessionManager(initCallback, cancellable) {
|
|
return new SessionManagerProxy(Gio.DBus.session, 'org.gnome.SessionManager', '/org/gnome/SessionManager', initCallback, cancellable);
|
|
}
|