• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdecore
 

tdecore

tderootsystemdevice.cpp

00001 /* This file is part of the TDE libraries
00002    Copyright (C) 2012 Timothy Pearson <kb9vqf@pearsoncomputing.net>
00003              (C) 2013 Golubev Alexander <fatzer2@gmail.com>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License version 2 as published by the Free Software Foundation.
00008 
00009    This library is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012    Library General Public License for more details.
00013 
00014    You should have received a copy of the GNU Library General Public License
00015    along with this library; see the file COPYING.LIB.  If not, write to
00016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017    Boston, MA 02110-1301, USA.
00018 */
00019 
00020 #include "tderootsystemdevice.h"
00021 #include "tdestoragedevice.h"
00022 
00023 #include <unistd.h>
00024 
00025 #include <tqfile.h>
00026 
00027 #include <dcopclient.h>
00028 #include "tdeglobal.h"
00029 #include "tdeconfig.h"
00030 #include "tdeapplication.h"
00031 #include "kstandarddirs.h"
00032 
00033 #include "config.h"
00034 
00035 #if defined(WITH_TDEHWLIB_DAEMONS) || defined(WITH_UPOWER) || defined(WITH_DEVKITPOWER) || defined(WITH_HAL) || defined(WITH_CONSOLEKIT)
00036     #include <tqdbusdata.h>
00037     #include <tqdbusmessage.h>
00038     #include <tqdbusproxy.h>
00039     #include <tqdbusvariant.h>
00040     #include <tqdbusconnection.h>
00041 #endif // defined(WITH_TDEHWLIB_DAEMONS) || defined(WITH_UPOWER) || defined(WITH_DEVKITPOWER) || defined(WITH_HAL) || defined(WITH_CONSOLEKIT)
00042 
00043 TDERootSystemDevice::TDERootSystemDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TDEGenericDevice(dt, dn) {
00044     m_hibernationSpace = -1;
00045 }
00046 
00047 TDERootSystemDevice::~TDERootSystemDevice() {
00048 }
00049 
00050 TDESystemFormFactor::TDESystemFormFactor TDERootSystemDevice::formFactor() {
00051     return m_formFactor;
00052 }
00053 
00054 void TDERootSystemDevice::internalSetFormFactor(TDESystemFormFactor::TDESystemFormFactor ff) {
00055     m_formFactor = ff;
00056 }
00057 
00058 TDESystemPowerStateList TDERootSystemDevice::powerStates() {
00059     return m_powerStates;
00060 }
00061 
00062 void TDERootSystemDevice::internalSetPowerStates(TDESystemPowerStateList ps) {
00063     m_powerStates = ps;
00064 }
00065 
00066 TDESystemHibernationMethodList TDERootSystemDevice::hibernationMethods() {
00067     return m_hibernationMethods;
00068 }
00069 
00070 void TDERootSystemDevice::internalSetHibernationMethods(TDESystemHibernationMethodList hm) {
00071     m_hibernationMethods = hm;
00072 }
00073 
00074 TDESystemHibernationMethod::TDESystemHibernationMethod TDERootSystemDevice::hibernationMethod() {
00075     return m_hibernationMethod;
00076 }
00077 
00078 void TDERootSystemDevice::internalSetHibernationMethod(TDESystemHibernationMethod::TDESystemHibernationMethod hm) {
00079     m_hibernationMethod = hm;
00080 }
00081 
00082 unsigned long TDERootSystemDevice::diskSpaceNeededForHibernation() {
00083     return m_hibernationSpace;
00084 }
00085 
00086 void TDERootSystemDevice::internalSetDiskSpaceNeededForHibernation(unsigned long sz) {
00087     m_hibernationSpace = sz;
00088 }
00089 
00090 bool TDERootSystemDevice::canSetHibernationMethod() {
00091     TQString hibernationnode = "/sys/power/disk";
00092     int rval = access (hibernationnode.ascii(), W_OK);
00093     if (rval == 0) {
00094         return TRUE;
00095     }
00096 
00097 #ifdef WITH_TDEHWLIB_DAEMONS
00098     {
00099         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00100         if (dbusConn.isConnected()) {
00101             // can set hibernation method?
00102             TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00103                         "org.trinitydesktop.hardwarecontrol",
00104                         "/org/trinitydesktop/hardwarecontrol",
00105                         "org.trinitydesktop.hardwarecontrol.Power",
00106                         "CanSetHibernationMethod");
00107             TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00108             if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00109                 return reply[0].toBool();
00110             }
00111         }
00112     }
00113 #endif // WITH_TDEHWLIB_DAEMONS
00114 
00115     return FALSE;
00116 }
00117 
00118 bool TDERootSystemDevice::canStandby() {
00119     TQString statenode = "/sys/power/state";
00120     int rval = access (statenode.ascii(), W_OK);
00121     if (rval == 0) {
00122         if (powerStates().contains(TDESystemPowerState::Standby)) {
00123             return TRUE;
00124         }
00125         else {
00126             return FALSE;
00127         }
00128     }
00129 
00130 #ifdef WITH_TDEHWLIB_DAEMONS
00131     {
00132         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00133         if (dbusConn.isConnected()) {
00134             // can standby?
00135             TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00136                         "org.trinitydesktop.hardwarecontrol",
00137                         "/org/trinitydesktop/hardwarecontrol",
00138                         "org.trinitydesktop.hardwarecontrol.Power",
00139                         "CanStandby");
00140             TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00141             if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00142                 return reply[0].toBool();
00143             }
00144         }
00145     }
00146 #endif // WITH_TDEHWLIB_DAEMONS
00147 
00148     return FALSE;
00149 }
00150 
00151 bool TDERootSystemDevice::canFreeze() {
00152     TQString statenode = "/sys/power/state";
00153     int rval = access (statenode.ascii(), W_OK);
00154     if (rval == 0) {
00155         if (powerStates().contains(TDESystemPowerState::Freeze)) {
00156             return TRUE;
00157         }
00158         else {
00159             return FALSE;
00160         }
00161     }
00162 
00163 #ifdef WITH_TDEHWLIB_DAEMONS
00164     {
00165         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00166         if (dbusConn.isConnected()) {
00167             // can freeze?
00168             TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00169                         "org.trinitydesktop.hardwarecontrol",
00170                         "/org/trinitydesktop/hardwarecontrol",
00171                         "org.trinitydesktop.hardwarecontrol.Power",
00172                         "CanFreeze");
00173             TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00174             if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00175                 return reply[0].toBool();
00176             }
00177         }
00178     }
00179 #endif // WITH_TDEHWLIB_DAEMONS
00180 
00181     return FALSE;
00182 }
00183 
00184 bool TDERootSystemDevice::canSuspend() {
00185     TQString statenode = "/sys/power/state";
00186     int rval = access (statenode.ascii(), W_OK);
00187     if (rval == 0) {
00188         if (powerStates().contains(TDESystemPowerState::Suspend)) {
00189             return TRUE;
00190         }
00191         else {
00192             return FALSE;
00193         }
00194     }
00195 
00196 #ifdef WITH_LOGINDPOWER
00197     {
00198         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00199         if (dbusConn.isConnected()) {
00200             // can suspend?
00201             TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00202                         "org.freedesktop.login1",
00203                         "/org/freedesktop/login1",
00204                         "org.freedesktop.login1.Manager",
00205                         "CanSuspend");
00206             TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00207             if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00208                 return (reply[0].toString() == "yes");
00209             }
00210         }
00211     }
00212 #endif // WITH_LOGINDPOWER
00213 
00214 #ifdef WITH_UPOWER
00215     {
00216         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00217         if (dbusConn.isConnected()) {
00218             TQT_DBusProxy upowerProperties("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.DBus.Properties", dbusConn);
00219             if (upowerProperties.canSend()) {
00220                 // can suspend?
00221                 TQValueList<TQT_DBusData> params;
00222                 params << TQT_DBusData::fromString(upowerProperties.interface()) << TQT_DBusData::fromString("CanSuspend");
00223                 TQT_DBusMessage reply = upowerProperties.sendWithReply("Get", params);
00224                 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00225                     return reply[0].toVariant().value.toBool();
00226                 }
00227             }
00228         }
00229     }
00230 #endif// WITH_UPOWER
00231 
00232 #ifdef WITH_DEVKITPOWER
00233     {
00234         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00235         if (dbusConn.isConnected()) {
00236             TQT_DBusProxy devkitpowerProperties("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power", "org.freedesktop.DBus.Properties", dbusConn);
00237             if (devkitpowerProperties.canSend()) {
00238                 // can suspend?
00239                 TQValueList<TQT_DBusData> params;
00240                 params << TQT_DBusData::fromString(devkitpowerProperties.interface()) << TQT_DBusData::fromString("CanSuspend");
00241                 TQT_DBusMessage reply = devkitpowerProperties.sendWithReply("Get", params);
00242                 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00243                     return reply[0].toVariant().value.toBool();
00244                 }
00245             }
00246         }
00247     }
00248 #endif// WITH_DEVKITPOWER
00249 
00250 #ifdef WITH_HAL
00251     {
00252         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00253         if (dbusConn.isConnected()) {
00254             TQT_DBusProxy halProperties("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device", dbusConn);
00255             if (halProperties.canSend()) {
00256                 // can suspend?
00257                 TQValueList<TQT_DBusData> params;
00258                 TQT_DBusMessage reply;
00259                 params.clear();
00260                 params << TQT_DBusData::fromString("power_management.can_suspend");
00261                 reply = halProperties.sendWithReply("GetPropertyBoolean", params);
00262                 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00263                     return reply[0].toBool();
00264                 }
00265                 params.clear();
00266                 params << TQT_DBusData::fromString("power_management.can_suspend_to_ram");
00267                 reply = halProperties.sendWithReply("GetPropertyBoolean", params);
00268                 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00269                     return reply[0].toBool();
00270                 }
00271             }
00272         }
00273     }
00274 #endif // WITH_HAL
00275 
00276 #ifdef WITH_TDEHWLIB_DAEMONS
00277     {
00278         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00279         if (dbusConn.isConnected()) {
00280             // can suspend?
00281             TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00282                         "org.trinitydesktop.hardwarecontrol",
00283                         "/org/trinitydesktop/hardwarecontrol",
00284                         "org.trinitydesktop.hardwarecontrol.Power",
00285                         "CanSuspend");
00286             TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00287             if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00288                 return reply[0].toBool();
00289             }
00290         }
00291     }
00292 #endif // WITH_TDEHWLIB_DAEMONS
00293 
00294     return FALSE;
00295 }
00296 
00297 bool TDERootSystemDevice::canHibernate() {
00298     TQString statenode = "/sys/power/state";
00299     int rval = access (statenode.ascii(), W_OK);
00300     if (rval == 0) {
00301         if (powerStates().contains(TDESystemPowerState::Hibernate)) {
00302             return TRUE;
00303         }
00304         else {
00305             return FALSE;
00306         }
00307     }
00308 
00309 #ifdef WITH_LOGINDPOWER
00310     {
00311         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00312         if (dbusConn.isConnected()) {
00313             // can hibernate?
00314             TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00315                         "org.freedesktop.login1",
00316                         "/org/freedesktop/login1",
00317                         "org.freedesktop.login1.Manager",
00318                         "CanHibernate");
00319             TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00320             if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00321                 return (reply[0].toString() == "yes");
00322             }
00323         }
00324     }
00325 #endif // WITH_LOGINDPOWER
00326 
00327 #ifdef WITH_UPOWER
00328     {
00329         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00330         if (dbusConn.isConnected()) {
00331             TQT_DBusProxy upowerProperties("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.DBus.Properties", dbusConn);
00332             if (upowerProperties.canSend()) {
00333                 // can hibernate?
00334                 TQValueList<TQT_DBusData> params;
00335                 params << TQT_DBusData::fromString(upowerProperties.interface()) << TQT_DBusData::fromString("CanHibernate");
00336                 TQT_DBusMessage reply = upowerProperties.sendWithReply("Get", params);
00337                 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00338                     return reply[0].toVariant().value.toBool();
00339                 }
00340             }
00341         }
00342     }
00343 #endif// WITH_UPOWER
00344 
00345 #ifdef WITH_DEVKITPOWER
00346     {
00347         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00348         if (dbusConn.isConnected()) {
00349             TQT_DBusProxy devkitpowerProperties("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power", "org.freedesktop.DBus.Properties", dbusConn);
00350             if (devkitpowerProperties.canSend()) {
00351                 // can hibernate?
00352                 TQValueList<TQT_DBusData> params;
00353                 params << TQT_DBusData::fromString(devkitpowerProperties.interface()) << TQT_DBusData::fromString("CanHibernate");
00354                 TQT_DBusMessage reply = devkitpowerProperties.sendWithReply("Get", params);
00355                 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00356                     return reply[0].toVariant().value.toBool();
00357                 }
00358             }
00359         }
00360     }
00361 #endif// WITH_DEVKITPOWER
00362 
00363 #ifdef WITH_HAL
00364     {
00365         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00366         if (dbusConn.isConnected()) {
00367             TQT_DBusProxy halProperties("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device", dbusConn);
00368             if (halProperties.canSend()) {
00369                 // can hibernate?
00370                 TQValueList<TQT_DBusData> params;
00371                 TQT_DBusMessage reply;
00372                 params.clear();
00373                 params << TQT_DBusData::fromString("power_management.can_hibernate");
00374                 reply = halProperties.sendWithReply("GetPropertyBoolean", params);
00375                 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00376                     return reply[0].toBool();
00377                 }
00378                 params.clear();
00379                 params << TQT_DBusData::fromString("power_management.can_suspend_to_disk");
00380                 reply = halProperties.sendWithReply("GetPropertyBoolean", params);
00381                 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00382                     return reply[0].toBool();
00383                 }
00384             }
00385         }
00386     }
00387 #endif // WITH_HAL
00388 
00389 #ifdef WITH_TDEHWLIB_DAEMONS
00390     {
00391         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00392         if (dbusConn.isConnected()) {
00393             // can hibernate?
00394             TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00395                         "org.trinitydesktop.hardwarecontrol",
00396                         "/org/trinitydesktop/hardwarecontrol",
00397                         "org.trinitydesktop.hardwarecontrol.Power",
00398                         "CanHibernate");
00399             TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00400             if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00401                 return reply[0].toBool();
00402             }
00403         }
00404     }
00405 #endif // WITH_TDEHWLIB_DAEMONS
00406 
00407     return FALSE;
00408 }
00409 
00410 bool TDERootSystemDevice::canPowerOff() {
00411     TDEConfig config("ksmserverrc", true);
00412     config.setGroup("General" );
00413     if (!config.readBoolEntry( "offerShutdown", true )) {
00414         return FALSE;
00415     }
00416 
00417 #ifdef WITH_LOGINDPOWER
00418     {
00419         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00420         if (dbusConn.isConnected()) {
00421             // can power off?
00422             TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00423                         "org.freedesktop.login1",
00424                         "/org/freedesktop/login1",
00425                         "org.freedesktop.login1.Manager",
00426                         "CanPowerOff");
00427             TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00428             if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00429                 return (reply[0].toString() == "yes");
00430             }
00431         }
00432     }
00433 #endif // WITH_LOGINDPOWER
00434 
00435 #ifdef WITH_CONSOLEKIT
00436     {
00437         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00438         if (dbusConn.isConnected()) {
00439             // can power off?
00440             TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00441                         "org.freedesktop.ConsoleKit",
00442                         "/org/freedesktop/ConsoleKit/Manager",
00443                         "org.freedesktop.ConsoleKit.Manager",
00444                         "CanStop");
00445             TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00446             if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00447                 return reply[0].toBool();
00448             }
00449         }
00450     }
00451 #endif // WITH_CONSOLEKIT
00452 
00453     // FIXME
00454     // Can we power down this system?
00455     // This should probably be checked via DCOP and therefore interface with TDM
00456     // if ( DM().canShutdown() ) {
00457     //  return TRUE;
00458     // }
00459     return TRUE;
00460 }
00461 
00462 bool TDERootSystemDevice::canReboot() {
00463     TDEConfig config("ksmserverrc", true);
00464     config.setGroup("General" );
00465     if (!config.readBoolEntry( "offerShutdown", true )) {
00466         return FALSE;
00467     }
00468 
00469 #ifdef WITH_LOGINDPOWER
00470     {
00471         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00472         if (dbusConn.isConnected()) {
00473             // can reboot?
00474             TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00475                         "org.freedesktop.login1",
00476                         "/org/freedesktop/login1",
00477                         "org.freedesktop.login1.Manager",
00478                         "CanReboot");
00479             TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00480             if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00481                 return (reply[0].toString() == "yes");
00482             }
00483         }
00484     }
00485 #endif // WITH_LOGINDPOWER
00486 
00487 #ifdef WITH_CONSOLEKIT
00488     {
00489         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00490         if (dbusConn.isConnected()) {
00491             // can reboot?
00492             TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00493                         "org.freedesktop.ConsoleKit",
00494                         "/org/freedesktop/ConsoleKit/Manager",
00495                         "org.freedesktop.ConsoleKit.Manager",
00496                         "CanRestart");
00497             TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00498             if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00499                 return reply[0].toBool();
00500             }
00501         }
00502     }
00503 #endif // WITH_CONSOLEKIT
00504 
00505     // FIXME
00506     // Can we power down this system?
00507     // This should probably be checked via DCOP and therefore interface with TDM
00508     // if ( DM().canShutdown() ) {
00509     //  return TRUE;
00510     // }
00511     return TRUE;
00512 }
00513 
00514 void TDERootSystemDevice::setHibernationMethod(TDESystemHibernationMethod::TDESystemHibernationMethod hm) {
00515     TQString hibernationnode = "/sys/power/disk";
00516     TQFile file( hibernationnode );
00517     if ( file.open( IO_WriteOnly ) ) {
00518         TQString hibernationCommand;
00519         if (hm == TDESystemHibernationMethod::Platform) {
00520             hibernationCommand = "platform";
00521         }
00522         if (hm == TDESystemHibernationMethod::Shutdown) {
00523             hibernationCommand = "shutdown";
00524         }
00525         if (hm == TDESystemHibernationMethod::Reboot) {
00526             hibernationCommand = "reboot";
00527         }
00528         if (hm == TDESystemHibernationMethod::TestProc) {
00529             hibernationCommand = "testproc";
00530         }
00531         if (hm == TDESystemHibernationMethod::Test) {
00532             hibernationCommand = "test";
00533         }
00534         TQTextStream stream( &file );
00535         stream << hibernationCommand;
00536         file.close();
00537         return;
00538     }
00539 
00540 #ifdef WITH_TDEHWLIB_DAEMONS
00541     {
00542         TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00543         if (dbusConn.isConnected()) {
00544             TQT_DBusProxy hardwareControl("org.trinitydesktop.hardwarecontrol", "/org/trinitydesktop/hardwarecontrol", "org.trinitydesktop.hardwarecontrol.Power", dbusConn);
00545             if (hardwareControl.canSend()) {
00546                 // set hibernation method
00547                 TQValueList<TQT_DBusData> params;
00548                 TQString hibernationCommand;
00549                 if (hm == TDESystemHibernationMethod::Platform) {
00550                     hibernationCommand = "platform";
00551                 }
00552                 if (hm == TDESystemHibernationMethod::Shutdown) {
00553                     hibernationCommand = "shutdown";
00554                 }
00555                 if (hm == TDESystemHibernationMethod::Reboot) {
00556                     hibernationCommand = "reboot";
00557                 }
00558                 if (hm == TDESystemHibernationMethod::TestProc) {
00559                     hibernationCommand = "testproc";
00560                 }
00561                 if (hm == TDESystemHibernationMethod::Test) {
00562                     hibernationCommand = "test";
00563                 }
00564                 params << TQT_DBusData::fromString(hibernationCommand);
00565                 TQT_DBusMessage reply = hardwareControl.sendWithReply("SetHibernationMethod", params);
00566                 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00567                     return;
00568                 }
00569             }
00570         }
00571     }
00572 #endif // WITH_TDEHWLIB_DAEMONS
00573 
00574 }
00575 
00576 bool TDERootSystemDevice::setPowerState(TDESystemPowerState::TDESystemPowerState ps) {
00577     if ((ps == TDESystemPowerState::Standby) || (ps == TDESystemPowerState::Freeze) || (ps == TDESystemPowerState::Suspend) || (ps == TDESystemPowerState::Hibernate)) {
00578         TQString statenode = "/sys/power/state";
00579         TQFile file( statenode );
00580         if ( file.open( IO_WriteOnly ) ) {
00581             TQString powerCommand;
00582             if (ps == TDESystemPowerState::Standby) {
00583                 powerCommand = "standby";
00584             }
00585             if (ps == TDESystemPowerState::Freeze) {
00586                 powerCommand = "freeze";
00587             }
00588             if (ps == TDESystemPowerState::Suspend) {
00589                 powerCommand = "mem";
00590             }
00591             if (ps == TDESystemPowerState::Hibernate) {
00592                 powerCommand = "disk";
00593             }
00594             TQTextStream stream( &file );
00595             stream << powerCommand;
00596             file.close();
00597             return true;
00598         }
00599 
00600 #ifdef WITH_LOGINDPOWER
00601         {
00602             // No support for "freeze" and "standby" in org.freedesktop.login1
00603             TQT_DBusConnection dbusConn;
00604             dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00605             if ( dbusConn.isConnected() ) {
00606                 TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
00607                                           "org.freedesktop.login1.Manager", dbusConn);
00608                 TQValueList<TQT_DBusData> params;
00609                 params << TQT_DBusData::fromBool(true);
00610                 if (logindProxy.canSend()) {
00611                     if (ps == TDESystemPowerState::Suspend) {
00612                         TQT_DBusMessage reply = logindProxy.sendWithReply("Suspend", params);
00613                         if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00614                             return true;
00615                         }
00616                     }
00617                     else if (ps == TDESystemPowerState::Hibernate) {
00618                         TQT_DBusMessage reply = logindProxy.sendWithReply("Hibernate", params);
00619                         if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00620                             return true;
00621                         }
00622                     }
00623                 }
00624             }
00625         }
00626 #endif // WITH_LOGINDPOWER
00627 
00628 #ifdef WITH_UPOWER
00629         {
00630             TQT_DBusConnection dbusConn;
00631             dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00632             if ( dbusConn.isConnected() ) {
00633                 if (ps == TDESystemPowerState::Suspend) {
00634                     TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00635                                 "org.freedesktop.UPower",
00636                                 "/org/freedesktop/UPower",
00637                                 "org.freedesktop.UPower",
00638                                 "Suspend");
00639                     TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00640                     if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00641                         return true;
00642                     }
00643                 }
00644                 else if (ps == TDESystemPowerState::Hibernate) {
00645                     TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00646                                 "org.freedesktop.UPower",
00647                                 "/org/freedesktop/UPower",
00648                                 "org.freedesktop.UPower",
00649                                 "Hibernate");
00650                     TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00651                     if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00652                         return true;
00653                     }
00654                 }
00655             }
00656         }
00657 #endif // WITH_UPOWER
00658 
00659 #ifdef WITH_DEVKITPOWER
00660         {
00661             TQT_DBusConnection dbusConn;
00662             dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00663             if ( dbusConn.isConnected() ) {
00664                 if (ps == TDESystemPowerState::Suspend) {
00665                     TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00666                                 "org.freedesktop.DeviceKit.Power",
00667                                 "/org/freedesktop/DeviceKit/Power",
00668                                 "org.freedesktop.DeviceKit.Power",
00669                                 "Suspend");
00670                     TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00671                     if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00672                         return true;
00673                     }
00674                 }
00675                 else if (ps == TDESystemPowerState::Hibernate) {
00676                     TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00677                                 "org.freedesktop.DeviceKit.Power",
00678                                 "/org/freedesktop/DeviceKit/Power",
00679                                 "org.freedesktop.DeviceKit.Power",
00680                                 "Hibernate");
00681                     TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00682                     if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00683                         return true;
00684                     }
00685                 }
00686             }
00687         }
00688 #endif // WITH_DEVKITPOWER
00689 
00690 #ifdef WITH_HAL
00691         {
00692             TQT_DBusConnection dbusConn;
00693             dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00694             if ( dbusConn.isConnected() ) {
00695                 if (ps == TDESystemPowerState::Suspend) {
00696                     TQT_DBusProxy halPowerManagement(
00697                             "org.freedesktop.Hal",
00698                             "/org/freedesktop/Hal/devices/computer",
00699                             "org.freedesktop.Hal.Device.SystemPowerManagement",
00700                             dbusConn);
00701                     TQValueList<TQT_DBusData> params;
00702                     params << TQT_DBusData::fromInt32(0);
00703                     TQT_DBusMessage reply = halPowerManagement.sendWithReply("Suspend", params);
00704                     if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00705                         return true;
00706                     }
00707                 }
00708                 else if (ps == TDESystemPowerState::Hibernate) {
00709                     TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00710                                 "org.freedesktop.Hal",
00711                                 "/org/freedesktop/Hal/devices/computer",
00712                                 "org.freedesktop.Hal.Device.SystemPowerManagement",
00713                                 "Hibernate");
00714                     TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00715                     if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00716                         return true;
00717                     }
00718                 }
00719             }
00720         }
00721 #endif // WITH_HAL
00722 
00723 #ifdef WITH_TDEHWLIB_DAEMONS
00724         {
00725             TQT_DBusConnection dbusConn;
00726             dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00727             if ( dbusConn.isConnected() ) {
00728                 if (ps == TDESystemPowerState::Standby) {
00729                     TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00730                                 "org.trinitydesktop.hardwarecontrol",
00731                                 "/org/trinitydesktop/hardwarecontrol",
00732                                 "org.trinitydesktop.hardwarecontrol.Power",
00733                                 "Standby");
00734                     TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00735                     if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00736                         return true;
00737                     }
00738                 }
00739                 else if (ps == TDESystemPowerState::Freeze) {
00740                     TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00741                                 "org.trinitydesktop.hardwarecontrol",
00742                                 "/org/trinitydesktop/hardwarecontrol",
00743                                 "org.trinitydesktop.hardwarecontrol.Power",
00744                                 "Freeze");
00745                     TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00746                     if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00747                         return true;
00748                     }
00749                 }
00750                 else if (ps == TDESystemPowerState::Suspend) {
00751                     TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00752                                 "org.trinitydesktop.hardwarecontrol",
00753                                 "/org/trinitydesktop/hardwarecontrol",
00754                                 "org.trinitydesktop.hardwarecontrol.Power",
00755                                 "Suspend");
00756                     TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00757                     if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00758                         return true;
00759                     }
00760                 }
00761                 else if (ps == TDESystemPowerState::Hibernate) {
00762                     TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00763                                 "org.trinitydesktop.hardwarecontrol",
00764                                 "/org/trinitydesktop/hardwarecontrol",
00765                                 "org.trinitydesktop.hardwarecontrol.Power",
00766                                 "Hibernate");
00767                     TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00768                     if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00769                         return true;
00770                     }
00771                 }
00772             }
00773         }
00774 #endif // WITH_TDEHWLIB_DAEMONS
00775 
00776         return false;
00777     }
00778     else if (ps == TDESystemPowerState::PowerOff) {
00779         TDEConfig config("ksmserverrc", true);
00780         config.setGroup("General" );
00781         if (!config.readBoolEntry( "offerShutdown", true )) {
00782             return false;
00783         }
00784 #ifdef WITH_LOGINDPOWER
00785         {
00786             TQT_DBusConnection dbusConn;
00787             dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00788             if ( dbusConn.isConnected() ) {
00789                 TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
00790                                           "org.freedesktop.login1.Manager", dbusConn);
00791                 TQValueList<TQT_DBusData> params;
00792                 params << TQT_DBusData::fromBool(true);
00793                 if (logindProxy.canSend()) {
00794                     TQT_DBusMessage reply = logindProxy.sendWithReply("PowerOff", params);
00795                     if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00796                         return true;
00797                     }
00798                 }
00799             }
00800         }
00801 #endif // WITH_LOGINDPOWER
00802 #ifdef WITH_CONSOLEKIT
00803         {
00804             TQT_DBusConnection dbusConn;
00805             dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00806             if ( dbusConn.isConnected() ) {
00807                 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00808                             "org.freedesktop.ConsoleKit",
00809                             "/org/freedesktop/ConsoleKit/Manager",
00810                             "org.freedesktop.ConsoleKit.Manager",
00811                             "Stop");
00812                 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00813                 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00814                     return true;
00815                 }
00816             }
00817         }
00818 #endif // WITH_CONSOLEKIT
00819         // Power down the system using a DCOP command
00820         // Values are explained at http://lists.kde.org/?l=kde-linux&m=115770988603387
00821         TQByteArray data;
00822         TQDataStream arg(data, IO_WriteOnly);
00823         arg << (int)0 << (int)2 << (int)2;
00824         if ( kapp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
00825             return true;
00826         }
00827         return false;
00828     }
00829     else if (ps == TDESystemPowerState::Reboot) {
00830         TDEConfig config("ksmserverrc", true);
00831         config.setGroup("General" );
00832         if (!config.readBoolEntry( "offerShutdown", true )) {
00833             return false;
00834         }
00835 #ifdef WITH_LOGINDPOWER
00836         {
00837             TQT_DBusConnection dbusConn;
00838             dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00839             if ( dbusConn.isConnected() ) {
00840                 TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
00841                                           "org.freedesktop.login1.Manager", dbusConn);
00842                 TQValueList<TQT_DBusData> params;
00843                 params << TQT_DBusData::fromBool(true);
00844                 if (logindProxy.canSend()) {
00845                     TQT_DBusMessage reply = logindProxy.sendWithReply("Reboot", params);
00846                     if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00847                         return true;
00848                     }
00849                 }
00850             }
00851         }
00852 #endif // WITH_LOGINDPOWER
00853 #ifdef WITH_CONSOLEKIT
00854         {
00855             TQT_DBusConnection dbusConn;
00856             dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00857             if ( dbusConn.isConnected() ) {
00858                 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00859                             "org.freedesktop.ConsoleKit",
00860                             "/org/freedesktop/ConsoleKit/Manager",
00861                             "org.freedesktop.ConsoleKit.Manager",
00862                             "Restart");
00863                 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00864                 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00865                     return true;
00866                 }
00867             }
00868         }
00869 #endif // WITH_CONSOLEKIT
00870         // Power down the system using a DCOP command
00871         // Values are explained at http://lists.kde.org/?l=kde-linux&m=115770988603387
00872         TQByteArray data;
00873         TQDataStream arg(data, IO_WriteOnly);
00874         arg << (int)0 << (int)1 << (int)2;
00875         if ( kapp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
00876             return true;
00877         }
00878         return false;
00879     }
00880     else if (ps == TDESystemPowerState::Active) {
00881         // Ummm...we're already active...
00882         return true;
00883     }
00884 
00885     return false;
00886 }
00887 
00888 #include "tderootsystemdevice.moc"

tdecore

Skip menu "tdecore"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

tdecore

Skip menu "tdecore"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdecore by doxygen 1.6.3
This website is maintained by Timothy Pearson.