-- Copyright (C) 2009 John Millikin -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . {-# LANGUAGE OverloadedStrings #-} module Main (main) where import DBus.Bus import DBus.Client import DBus.Message import DBus.Types import Data.List (sort) dbus :: Proxy dbus = Proxy (RemoteObject "org.freedesktop.DBus" "/org/freedesktop/DBus") "org.freedesktop.DBus" main :: IO () main = do -- Connect to the bus, and print which name was assigned to this -- connection. client <- mkClient =<< getSessionBus putStrLn $ "Connected as: " ++ show (clientName client) -- Request a list of connected clients from the bus reply <- callProxyBlocking_ client dbus "ListNames" [] [] -- Pull out the body, and convert it to [String] let Just names = fromArray =<< fromVariant (messageBody reply !! 0) -- Print each name on a line, sorted so reserved names are below -- temporary names. mapM_ putStrLn $ sort names