Class: DBus::ASessionBus

Inherits:
BusConnection show all
Defined in:
lib/dbus/bus.rb

Overview

D-Bus session bus class

The session bus is a session specific bus (mostly for desktop use).

Use SessionBus, the non-singleton ASessionBus is for the test suite.

Direct Known Subclasses

SessionBus

Constant Summary

Constants inherited from BusConnection

BusConnection::RELEASE_NAME_REPLY_NON_EXISTENT, BusConnection::RELEASE_NAME_REPLY_NOT_OWNER, BusConnection::RELEASE_NAME_REPLY_RELEASED

Constants inherited from Connection

Connection::NAME_FLAG_ALLOW_REPLACEMENT, Connection::NAME_FLAG_DO_NOT_QUEUE, Connection::NAME_FLAG_REPLACE_EXISTING, Connection::REQUEST_NAME_REPLY_ALREADY_OWNER, Connection::REQUEST_NAME_REPLY_EXISTS, Connection::REQUEST_NAME_REPLY_IN_QUEUE, Connection::REQUEST_NAME_REPLY_PRIMARY_OWNER

Instance Attribute Summary

Attributes inherited from BusConnection

#unique_name

Attributes inherited from Connection

#message_queue

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BusConnection

#add_match, #on_name_acquired, #on_name_lost, #proxy, #release_name, #remove_match, #request_name, #service

Methods inherited from Connection

#add_match, #dispatch_message_queue, #emit, #glibize, #handle_return_of_request_name, #introspect, #introspect_data, #object_server, #on_return, #process, #remove_match, #request_service, #send_sync, #send_sync_or_async, #wait_for_message

Constructor Details

#initializeASessionBus

Get the the default session bus.



222
223
224
# File 'lib/dbus/bus.rb', line 222

def initialize
  super(self.class.session_bus_address)
end

Class Method Details

.address_from_fileObject



233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
# File 'lib/dbus/bus.rb', line 233

def self.address_from_file
  # systemd uses /etc/machine-id
  # traditional dbus uses /var/lib/dbus/machine-id
  machine_id_path = Dir["{/etc,/var/lib/dbus,/var/db/dbus}/machine-id"].first
  return nil unless machine_id_path

  machine_id = File.read(machine_id_path).chomp

  display = ENV["DISPLAY"][/:(\d+)\.?/, 1]

  bus_file_path = File.join(ENV["HOME"], "/.dbus/session-bus/#{machine_id}-#{display}")
  return nil unless File.exist?(bus_file_path)

  File.open(bus_file_path).each_line do |line|
    if line =~ /^DBUS_SESSION_BUS_ADDRESS=(.*)/
      address = Regexp.last_match(1)
      return address[/\A'(.*)'\z/, 1] || address[/\A"(.*)"\z/, 1] || address
    end
  end
end

.session_bus_addressObject



226
227
228
229
230
231
# File 'lib/dbus/bus.rb', line 226

def self.session_bus_address
  ENV["DBUS_SESSION_BUS_ADDRESS"] ||
    address_from_file ||
    ("launchd:env=DBUS_LAUNCHD_SESSION_BUS_SOCKET" if Platform.macos?) ||
    (raise NotImplementedError, "Cannot find session bus; sorry, haven't figured out autolaunch yet")
end