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

tdecore

  • tdecore
  • tdehw
tderootsystemdevice.cpp
1 /* This file is part of the TDE libraries
2  Copyright (C) 2012 Timothy Pearson <kb9vqf@pearsoncomputing.net>
3  (C) 2013 Golubev Alexander <fatzer2@gmail.com>
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Library General Public
7  License version 2 as published by the Free Software Foundation.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Library General Public License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB. If not, write to
16  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  Boston, MA 02110-1301, USA.
18 */
19 
20 #include "tderootsystemdevice.h"
21 #include "tdestoragedevice.h"
22 
23 #include <unistd.h>
24 
25 #include <tqfile.h>
26 
27 #include <dcopclient.h>
28 #include "tdeglobal.h"
29 #include "tdeconfig.h"
30 #include "tdeapplication.h"
31 #include "kstandarddirs.h"
32 
33 #include "config.h"
34 
35 #if defined(WITH_TDEHWLIB_DAEMONS) || defined(WITH_UPOWER) || defined(WITH_DEVKITPOWER) || defined(WITH_HAL) || defined(WITH_CONSOLEKIT)
36  #include <tqdbusdata.h>
37  #include <tqdbusmessage.h>
38  #include <tqdbusproxy.h>
39  #include <tqdbusvariant.h>
40  #include <tqdbusconnection.h>
41 #endif // defined(WITH_TDEHWLIB_DAEMONS) || defined(WITH_UPOWER) || defined(WITH_DEVKITPOWER) || defined(WITH_HAL) || defined(WITH_CONSOLEKIT)
42 
43 TDERootSystemDevice::TDERootSystemDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TDEGenericDevice(dt, dn) {
44  m_hibernationSpace = -1;
45 }
46 
47 TDERootSystemDevice::~TDERootSystemDevice() {
48 }
49 
50 TDESystemFormFactor::TDESystemFormFactor TDERootSystemDevice::formFactor() {
51  return m_formFactor;
52 }
53 
54 void TDERootSystemDevice::internalSetFormFactor(TDESystemFormFactor::TDESystemFormFactor ff) {
55  m_formFactor = ff;
56 }
57 
58 TDESystemPowerStateList TDERootSystemDevice::powerStates() {
59  return m_powerStates;
60 }
61 
62 void TDERootSystemDevice::internalSetPowerStates(TDESystemPowerStateList ps) {
63  m_powerStates = ps;
64 }
65 
66 TDESystemHibernationMethodList TDERootSystemDevice::hibernationMethods() {
67  return m_hibernationMethods;
68 }
69 
70 void TDERootSystemDevice::internalSetHibernationMethods(TDESystemHibernationMethodList hm) {
71  m_hibernationMethods = hm;
72 }
73 
74 TDESystemHibernationMethod::TDESystemHibernationMethod TDERootSystemDevice::hibernationMethod() {
75  return m_hibernationMethod;
76 }
77 
78 void TDERootSystemDevice::internalSetHibernationMethod(TDESystemHibernationMethod::TDESystemHibernationMethod hm) {
79  m_hibernationMethod = hm;
80 }
81 
82 unsigned long TDERootSystemDevice::diskSpaceNeededForHibernation() {
83  return m_hibernationSpace;
84 }
85 
86 void TDERootSystemDevice::internalSetDiskSpaceNeededForHibernation(unsigned long sz) {
87  m_hibernationSpace = sz;
88 }
89 
90 bool TDERootSystemDevice::canSetHibernationMethod() {
91  TQString hibernationnode = "/sys/power/disk";
92  int rval = access (hibernationnode.ascii(), W_OK);
93  if (rval == 0) {
94  return TRUE;
95  }
96 
97 #ifdef WITH_TDEHWLIB_DAEMONS
98  {
99  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
100  if (dbusConn.isConnected()) {
101  // can set hibernation method?
102  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
103  "org.trinitydesktop.hardwarecontrol",
104  "/org/trinitydesktop/hardwarecontrol",
105  "org.trinitydesktop.hardwarecontrol.Power",
106  "CanSetHibernationMethod");
107  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
108  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
109  return reply[0].toBool();
110  }
111  }
112  }
113 #endif // WITH_TDEHWLIB_DAEMONS
114 
115  return FALSE;
116 }
117 
118 bool TDERootSystemDevice::canStandby() {
119  TQString statenode = "/sys/power/state";
120  int rval = access (statenode.ascii(), W_OK);
121  if (rval == 0) {
122  if (powerStates().contains(TDESystemPowerState::Standby)) {
123  return TRUE;
124  }
125  else {
126  return FALSE;
127  }
128  }
129 
130 #ifdef WITH_TDEHWLIB_DAEMONS
131  {
132  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
133  if (dbusConn.isConnected()) {
134  // can standby?
135  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
136  "org.trinitydesktop.hardwarecontrol",
137  "/org/trinitydesktop/hardwarecontrol",
138  "org.trinitydesktop.hardwarecontrol.Power",
139  "CanStandby");
140  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
141  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
142  return reply[0].toBool();
143  }
144  }
145  }
146 #endif // WITH_TDEHWLIB_DAEMONS
147 
148  return FALSE;
149 }
150 
151 bool TDERootSystemDevice::canFreeze() {
152  TQString statenode = "/sys/power/state";
153  int rval = access (statenode.ascii(), W_OK);
154  if (rval == 0) {
155  if (powerStates().contains(TDESystemPowerState::Freeze)) {
156  return TRUE;
157  }
158  else {
159  return FALSE;
160  }
161  }
162 
163 #ifdef WITH_TDEHWLIB_DAEMONS
164  {
165  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
166  if (dbusConn.isConnected()) {
167  // can freeze?
168  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
169  "org.trinitydesktop.hardwarecontrol",
170  "/org/trinitydesktop/hardwarecontrol",
171  "org.trinitydesktop.hardwarecontrol.Power",
172  "CanFreeze");
173  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
174  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
175  return reply[0].toBool();
176  }
177  }
178  }
179 #endif // WITH_TDEHWLIB_DAEMONS
180 
181  return FALSE;
182 }
183 
184 bool TDERootSystemDevice::canSuspend() {
185  TQString statenode = "/sys/power/state";
186  int rval = access (statenode.ascii(), W_OK);
187  if (rval == 0) {
188  if (powerStates().contains(TDESystemPowerState::Suspend)) {
189  return TRUE;
190  }
191  else {
192  return FALSE;
193  }
194  }
195 
196 #ifdef WITH_LOGINDPOWER
197  {
198  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
199  if (dbusConn.isConnected()) {
200  // can suspend?
201  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
202  "org.freedesktop.login1",
203  "/org/freedesktop/login1",
204  "org.freedesktop.login1.Manager",
205  "CanSuspend");
206  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
207  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
208  return (reply[0].toString() == "yes");
209  }
210  }
211  }
212 #endif // WITH_LOGINDPOWER
213 
214 #ifdef WITH_UPOWER
215  {
216  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
217  if (dbusConn.isConnected()) {
218  TQT_DBusProxy upowerProperties("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.DBus.Properties", dbusConn);
219  if (upowerProperties.canSend()) {
220  // can suspend?
221  TQValueList<TQT_DBusData> params;
222  params << TQT_DBusData::fromString(upowerProperties.interface()) << TQT_DBusData::fromString("CanSuspend");
223  TQT_DBusMessage reply = upowerProperties.sendWithReply("Get", params);
224  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
225  return reply[0].toVariant().value.toBool();
226  }
227  }
228  }
229  }
230 #endif// WITH_UPOWER
231 
232 #ifdef WITH_DEVKITPOWER
233  {
234  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
235  if (dbusConn.isConnected()) {
236  TQT_DBusProxy devkitpowerProperties("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power", "org.freedesktop.DBus.Properties", dbusConn);
237  if (devkitpowerProperties.canSend()) {
238  // can suspend?
239  TQValueList<TQT_DBusData> params;
240  params << TQT_DBusData::fromString(devkitpowerProperties.interface()) << TQT_DBusData::fromString("CanSuspend");
241  TQT_DBusMessage reply = devkitpowerProperties.sendWithReply("Get", params);
242  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
243  return reply[0].toVariant().value.toBool();
244  }
245  }
246  }
247  }
248 #endif// WITH_DEVKITPOWER
249 
250 #ifdef WITH_HAL
251  {
252  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
253  if (dbusConn.isConnected()) {
254  TQT_DBusProxy halProperties("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device", dbusConn);
255  if (halProperties.canSend()) {
256  // can suspend?
257  TQValueList<TQT_DBusData> params;
258  TQT_DBusMessage reply;
259  params.clear();
260  params << TQT_DBusData::fromString("power_management.can_suspend");
261  reply = halProperties.sendWithReply("GetPropertyBoolean", params);
262  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
263  return reply[0].toBool();
264  }
265  params.clear();
266  params << TQT_DBusData::fromString("power_management.can_suspend_to_ram");
267  reply = halProperties.sendWithReply("GetPropertyBoolean", params);
268  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
269  return reply[0].toBool();
270  }
271  }
272  }
273  }
274 #endif // WITH_HAL
275 
276 #ifdef WITH_TDEHWLIB_DAEMONS
277  {
278  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
279  if (dbusConn.isConnected()) {
280  // can suspend?
281  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
282  "org.trinitydesktop.hardwarecontrol",
283  "/org/trinitydesktop/hardwarecontrol",
284  "org.trinitydesktop.hardwarecontrol.Power",
285  "CanSuspend");
286  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
287  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
288  return reply[0].toBool();
289  }
290  }
291  }
292 #endif // WITH_TDEHWLIB_DAEMONS
293 
294  return FALSE;
295 }
296 
297 bool TDERootSystemDevice::canHibernate() {
298  TQString statenode = "/sys/power/state";
299  int rval = access (statenode.ascii(), W_OK);
300  if (rval == 0) {
301  if (powerStates().contains(TDESystemPowerState::Hibernate)) {
302  return TRUE;
303  }
304  else {
305  return FALSE;
306  }
307  }
308 
309 #ifdef WITH_LOGINDPOWER
310  {
311  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
312  if (dbusConn.isConnected()) {
313  // can hibernate?
314  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
315  "org.freedesktop.login1",
316  "/org/freedesktop/login1",
317  "org.freedesktop.login1.Manager",
318  "CanHibernate");
319  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
320  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
321  return (reply[0].toString() == "yes");
322  }
323  }
324  }
325 #endif // WITH_LOGINDPOWER
326 
327 #ifdef WITH_UPOWER
328  {
329  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
330  if (dbusConn.isConnected()) {
331  TQT_DBusProxy upowerProperties("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.DBus.Properties", dbusConn);
332  if (upowerProperties.canSend()) {
333  // can hibernate?
334  TQValueList<TQT_DBusData> params;
335  params << TQT_DBusData::fromString(upowerProperties.interface()) << TQT_DBusData::fromString("CanHibernate");
336  TQT_DBusMessage reply = upowerProperties.sendWithReply("Get", params);
337  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
338  return reply[0].toVariant().value.toBool();
339  }
340  }
341  }
342  }
343 #endif// WITH_UPOWER
344 
345 #ifdef WITH_DEVKITPOWER
346  {
347  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
348  if (dbusConn.isConnected()) {
349  TQT_DBusProxy devkitpowerProperties("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power", "org.freedesktop.DBus.Properties", dbusConn);
350  if (devkitpowerProperties.canSend()) {
351  // can hibernate?
352  TQValueList<TQT_DBusData> params;
353  params << TQT_DBusData::fromString(devkitpowerProperties.interface()) << TQT_DBusData::fromString("CanHibernate");
354  TQT_DBusMessage reply = devkitpowerProperties.sendWithReply("Get", params);
355  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
356  return reply[0].toVariant().value.toBool();
357  }
358  }
359  }
360  }
361 #endif// WITH_DEVKITPOWER
362 
363 #ifdef WITH_HAL
364  {
365  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
366  if (dbusConn.isConnected()) {
367  TQT_DBusProxy halProperties("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device", dbusConn);
368  if (halProperties.canSend()) {
369  // can hibernate?
370  TQValueList<TQT_DBusData> params;
371  TQT_DBusMessage reply;
372  params.clear();
373  params << TQT_DBusData::fromString("power_management.can_hibernate");
374  reply = halProperties.sendWithReply("GetPropertyBoolean", params);
375  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
376  return reply[0].toBool();
377  }
378  params.clear();
379  params << TQT_DBusData::fromString("power_management.can_suspend_to_disk");
380  reply = halProperties.sendWithReply("GetPropertyBoolean", params);
381  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
382  return reply[0].toBool();
383  }
384  }
385  }
386  }
387 #endif // WITH_HAL
388 
389 #ifdef WITH_TDEHWLIB_DAEMONS
390  {
391  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
392  if (dbusConn.isConnected()) {
393  // can hibernate?
394  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
395  "org.trinitydesktop.hardwarecontrol",
396  "/org/trinitydesktop/hardwarecontrol",
397  "org.trinitydesktop.hardwarecontrol.Power",
398  "CanHibernate");
399  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
400  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
401  return reply[0].toBool();
402  }
403  }
404  }
405 #endif // WITH_TDEHWLIB_DAEMONS
406 
407  return FALSE;
408 }
409 
410 bool TDERootSystemDevice::canPowerOff() {
411  TDEConfig config("ksmserverrc", true);
412  config.setGroup("General" );
413  if (!config.readBoolEntry( "offerShutdown", true )) {
414  return FALSE;
415  }
416 
417 #ifdef WITH_LOGINDPOWER
418  {
419  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
420  if (dbusConn.isConnected()) {
421  // can power off?
422  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
423  "org.freedesktop.login1",
424  "/org/freedesktop/login1",
425  "org.freedesktop.login1.Manager",
426  "CanPowerOff");
427  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
428  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
429  return (reply[0].toString() == "yes");
430  }
431  }
432  }
433 #endif // WITH_LOGINDPOWER
434 
435 #ifdef WITH_CONSOLEKIT
436  {
437  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
438  if (dbusConn.isConnected()) {
439  // can power off?
440  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
441  "org.freedesktop.ConsoleKit",
442  "/org/freedesktop/ConsoleKit/Manager",
443  "org.freedesktop.ConsoleKit.Manager",
444  "CanStop");
445  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
446  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
447  return reply[0].toBool();
448  }
449  }
450  }
451 #endif // WITH_CONSOLEKIT
452 
453  // FIXME
454  // Can we power down this system?
455  // This should probably be checked via DCOP and therefore interface with TDM
456  // if ( DM().canShutdown() ) {
457  // return TRUE;
458  // }
459  return TRUE;
460 }
461 
462 bool TDERootSystemDevice::canReboot() {
463  TDEConfig config("ksmserverrc", true);
464  config.setGroup("General" );
465  if (!config.readBoolEntry( "offerShutdown", true )) {
466  return FALSE;
467  }
468 
469 #ifdef WITH_LOGINDPOWER
470  {
471  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
472  if (dbusConn.isConnected()) {
473  // can reboot?
474  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
475  "org.freedesktop.login1",
476  "/org/freedesktop/login1",
477  "org.freedesktop.login1.Manager",
478  "CanReboot");
479  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
480  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
481  return (reply[0].toString() == "yes");
482  }
483  }
484  }
485 #endif // WITH_LOGINDPOWER
486 
487 #ifdef WITH_CONSOLEKIT
488  {
489  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
490  if (dbusConn.isConnected()) {
491  // can reboot?
492  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
493  "org.freedesktop.ConsoleKit",
494  "/org/freedesktop/ConsoleKit/Manager",
495  "org.freedesktop.ConsoleKit.Manager",
496  "CanRestart");
497  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
498  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
499  return reply[0].toBool();
500  }
501  }
502  }
503 #endif // WITH_CONSOLEKIT
504 
505  // FIXME
506  // Can we power down this system?
507  // This should probably be checked via DCOP and therefore interface with TDM
508  // if ( DM().canShutdown() ) {
509  // return TRUE;
510  // }
511  return TRUE;
512 }
513 
514 void TDERootSystemDevice::setHibernationMethod(TDESystemHibernationMethod::TDESystemHibernationMethod hm) {
515  TQString hibernationnode = "/sys/power/disk";
516  TQFile file( hibernationnode );
517  if ( file.open( IO_WriteOnly ) ) {
518  TQString hibernationCommand;
519  if (hm == TDESystemHibernationMethod::Platform) {
520  hibernationCommand = "platform";
521  }
522  if (hm == TDESystemHibernationMethod::Shutdown) {
523  hibernationCommand = "shutdown";
524  }
525  if (hm == TDESystemHibernationMethod::Reboot) {
526  hibernationCommand = "reboot";
527  }
528  if (hm == TDESystemHibernationMethod::TestProc) {
529  hibernationCommand = "testproc";
530  }
531  if (hm == TDESystemHibernationMethod::Test) {
532  hibernationCommand = "test";
533  }
534  TQTextStream stream( &file );
535  stream << hibernationCommand;
536  file.close();
537  return;
538  }
539 
540 #ifdef WITH_TDEHWLIB_DAEMONS
541  {
542  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
543  if (dbusConn.isConnected()) {
544  TQT_DBusProxy hardwareControl("org.trinitydesktop.hardwarecontrol", "/org/trinitydesktop/hardwarecontrol", "org.trinitydesktop.hardwarecontrol.Power", dbusConn);
545  if (hardwareControl.canSend()) {
546  // set hibernation method
547  TQValueList<TQT_DBusData> params;
548  TQString hibernationCommand;
549  if (hm == TDESystemHibernationMethod::Platform) {
550  hibernationCommand = "platform";
551  }
552  if (hm == TDESystemHibernationMethod::Shutdown) {
553  hibernationCommand = "shutdown";
554  }
555  if (hm == TDESystemHibernationMethod::Reboot) {
556  hibernationCommand = "reboot";
557  }
558  if (hm == TDESystemHibernationMethod::TestProc) {
559  hibernationCommand = "testproc";
560  }
561  if (hm == TDESystemHibernationMethod::Test) {
562  hibernationCommand = "test";
563  }
564  params << TQT_DBusData::fromString(hibernationCommand);
565  TQT_DBusMessage reply = hardwareControl.sendWithReply("SetHibernationMethod", params);
566  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
567  return;
568  }
569  }
570  }
571  }
572 #endif // WITH_TDEHWLIB_DAEMONS
573 
574 }
575 
576 bool TDERootSystemDevice::setPowerState(TDESystemPowerState::TDESystemPowerState ps) {
577  if ((ps == TDESystemPowerState::Standby) || (ps == TDESystemPowerState::Freeze) || (ps == TDESystemPowerState::Suspend) || (ps == TDESystemPowerState::Hibernate)) {
578  TQString statenode = "/sys/power/state";
579  TQFile file( statenode );
580  if ( file.open( IO_WriteOnly ) ) {
581  TQString powerCommand;
582  if (ps == TDESystemPowerState::Standby) {
583  powerCommand = "standby";
584  }
585  if (ps == TDESystemPowerState::Freeze) {
586  powerCommand = "freeze";
587  }
588  if (ps == TDESystemPowerState::Suspend) {
589  powerCommand = "mem";
590  }
591  if (ps == TDESystemPowerState::Hibernate) {
592  powerCommand = "disk";
593  }
594  TQTextStream stream( &file );
595  stream << powerCommand;
596  file.close();
597  return true;
598  }
599 
600 #ifdef WITH_LOGINDPOWER
601  {
602  TQT_DBusConnection dbusConn;
603  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
604  if ( dbusConn.isConnected() ) {
605  if (ps == TDESystemPowerState::Suspend) {
606  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
607  "org.freedesktop.login1",
608  "/org/freedesktop/login1",
609  "org.freedesktop.login1.Manager",
610  "Suspend");
611  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
612  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
613  return true;
614  }
615  }
616  else if (ps == TDESystemPowerState::Hibernate) {
617  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
618  "org.freedesktop.login1",
619  "/org/freedesktop/login1",
620  "org.freedesktop.login1.Manager",
621  "Hibernate");
622  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
623  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
624  return true;
625  }
626  }
627  }
628  }
629 #endif // WITH_LOGINDPOWER
630 
631 #ifdef WITH_UPOWER
632  {
633  TQT_DBusConnection dbusConn;
634  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
635  if ( dbusConn.isConnected() ) {
636  if (ps == TDESystemPowerState::Suspend) {
637  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
638  "org.freedesktop.UPower",
639  "/org/freedesktop/UPower",
640  "org.freedesktop.UPower",
641  "Suspend");
642  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
643  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
644  return true;
645  }
646  }
647  else if (ps == TDESystemPowerState::Hibernate) {
648  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
649  "org.freedesktop.UPower",
650  "/org/freedesktop/UPower",
651  "org.freedesktop.UPower",
652  "Hibernate");
653  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
654  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
655  return true;
656  }
657  }
658  }
659  }
660 #endif // WITH_UPOWER
661 
662 #ifdef WITH_DEVKITPOWER
663  {
664  TQT_DBusConnection dbusConn;
665  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
666  if ( dbusConn.isConnected() ) {
667  if (ps == TDESystemPowerState::Suspend) {
668  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
669  "org.freedesktop.DeviceKit.Power",
670  "/org/freedesktop/DeviceKit/Power",
671  "org.freedesktop.DeviceKit.Power",
672  "Suspend");
673  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
674  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
675  return true;
676  }
677  }
678  else if (ps == TDESystemPowerState::Hibernate) {
679  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
680  "org.freedesktop.DeviceKit.Power",
681  "/org/freedesktop/DeviceKit/Power",
682  "org.freedesktop.DeviceKit.Power",
683  "Hibernate");
684  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
685  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
686  return true;
687  }
688  }
689  }
690  }
691 #endif // WITH_DEVKITPOWER
692 
693 #ifdef WITH_HAL
694  {
695  TQT_DBusConnection dbusConn;
696  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
697  if ( dbusConn.isConnected() ) {
698  if (ps == TDESystemPowerState::Suspend) {
699  TQT_DBusProxy halPowerManagement(
700  "org.freedesktop.Hal",
701  "/org/freedesktop/Hal/devices/computer",
702  "org.freedesktop.Hal.Device.SystemPowerManagement",
703  dbusConn);
704  TQValueList<TQT_DBusData> params;
705  params << TQT_DBusData::fromInt32(0);
706  TQT_DBusMessage reply = halPowerManagement.sendWithReply("Suspend", params);
707  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
708  return true;
709  }
710  }
711  else if (ps == TDESystemPowerState::Hibernate) {
712  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
713  "org.freedesktop.Hal",
714  "/org/freedesktop/Hal/devices/computer",
715  "org.freedesktop.Hal.Device.SystemPowerManagement",
716  "Hibernate");
717  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
718  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
719  return true;
720  }
721  }
722  }
723  }
724 #endif // WITH_HAL
725 
726 #ifdef WITH_TDEHWLIB_DAEMONS
727  {
728  TQT_DBusConnection dbusConn;
729  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
730  if ( dbusConn.isConnected() ) {
731  if (ps == TDESystemPowerState::Standby) {
732  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
733  "org.trinitydesktop.hardwarecontrol",
734  "/org/trinitydesktop/hardwarecontrol",
735  "org.trinitydesktop.hardwarecontrol.Power",
736  "Standby");
737  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
738  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
739  return true;
740  }
741  }
742  else if (ps == TDESystemPowerState::Freeze) {
743  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
744  "org.trinitydesktop.hardwarecontrol",
745  "/org/trinitydesktop/hardwarecontrol",
746  "org.trinitydesktop.hardwarecontrol.Power",
747  "Freeze");
748  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
749  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
750  return true;
751  }
752  }
753  else if (ps == TDESystemPowerState::Suspend) {
754  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
755  "org.trinitydesktop.hardwarecontrol",
756  "/org/trinitydesktop/hardwarecontrol",
757  "org.trinitydesktop.hardwarecontrol.Power",
758  "Suspend");
759  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
760  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
761  return true;
762  }
763  }
764  else if (ps == TDESystemPowerState::Hibernate) {
765  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
766  "org.trinitydesktop.hardwarecontrol",
767  "/org/trinitydesktop/hardwarecontrol",
768  "org.trinitydesktop.hardwarecontrol.Power",
769  "Hibernate");
770  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
771  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
772  return true;
773  }
774  }
775  }
776  }
777 #endif // WITH_TDEHWLIB_DAEMONS
778 
779  return false;
780  }
781  else if (ps == TDESystemPowerState::PowerOff) {
782  TDEConfig config("ksmserverrc", true);
783  config.setGroup("General" );
784  if (!config.readBoolEntry( "offerShutdown", true )) {
785  return false;
786  }
787 #ifdef WITH_LOGINDPOWER
788  {
789  TQT_DBusConnection dbusConn;
790  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
791  if ( dbusConn.isConnected() ) {
792  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
793  "org.trinitydesktop.login1",
794  "/org/freedesktop/login1",
795  "org.freedesktop.login1.Manager",
796  "PowerOff");
797  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
798  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
799  return true;
800  }
801  }
802  }
803 #endif // WITH_LOGINDPOWER
804 #ifdef WITH_CONSOLEKIT
805  {
806  TQT_DBusConnection dbusConn;
807  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
808  if ( dbusConn.isConnected() ) {
809  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
810  "org.freedesktop.ConsoleKit",
811  "/org/freedesktop/ConsoleKit/Manager",
812  "org.freedesktop.ConsoleKit.Manager",
813  "Stop");
814  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
815  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
816  return true;
817  }
818  }
819  }
820 #endif // WITH_CONSOLEKIT
821  // Power down the system using a DCOP command
822  // Values are explained at http://lists.kde.org/?l=kde-linux&m=115770988603387
823  TQByteArray data;
824  TQDataStream arg(data, IO_WriteOnly);
825  arg << (int)0 << (int)2 << (int)2;
826  if ( kapp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
827  return true;
828  }
829  return false;
830  }
831  else if (ps == TDESystemPowerState::Reboot) {
832  TDEConfig config("ksmserverrc", true);
833  config.setGroup("General" );
834  if (!config.readBoolEntry( "offerShutdown", true )) {
835  return false;
836  }
837 #ifdef WITH_LOGINDPOWER
838  {
839  TQT_DBusConnection dbusConn;
840  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
841  if ( dbusConn.isConnected() ) {
842  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
843  "org.trinitydesktop.login1",
844  "/org/freedesktop/login1",
845  "org.freedesktop.login1.Manager",
846  "Reboot");
847  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
848  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
849  return true;
850  }
851  }
852  }
853 #endif // WITH_LOGINDPOWER
854 #ifdef WITH_CONSOLEKIT
855  {
856  TQT_DBusConnection dbusConn;
857  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
858  if ( dbusConn.isConnected() ) {
859  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
860  "org.freedesktop.ConsoleKit",
861  "/org/freedesktop/ConsoleKit/Manager",
862  "org.freedesktop.ConsoleKit.Manager",
863  "Restart");
864  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
865  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
866  return true;
867  }
868  }
869  }
870 #endif // WITH_CONSOLEKIT
871  // Power down the system using a DCOP command
872  // Values are explained at http://lists.kde.org/?l=kde-linux&m=115770988603387
873  TQByteArray data;
874  TQDataStream arg(data, IO_WriteOnly);
875  arg << (int)0 << (int)1 << (int)2;
876  if ( kapp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
877  return true;
878  }
879  return false;
880  }
881  else if (ps == TDESystemPowerState::Active) {
882  // Ummm...we're already active...
883  return true;
884  }
885 
886  return false;
887 }
888 
889 #include "tderootsystemdevice.moc"
TDEConfig
Access KDE Configuration entries.
Definition: tdeconfig.h:43

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.8.11
This website is maintained by Timothy Pearson.