• 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  int rval1 = access ("/var/lib/q4os/disable_can_freeze.stp", R_OK); //if file exists, globally disable freeze option
153  if( rval1 == 0 ) {
154  return FALSE;
155  }
156 
157  TQString statenode = "/sys/power/state";
158  int rval = access (statenode.ascii(), W_OK);
159  if (rval == 0) {
160  if (powerStates().contains(TDESystemPowerState::Freeze)) {
161  return TRUE;
162  }
163  else {
164  return FALSE;
165  }
166  }
167 
168 #ifdef WITH_TDEHWLIB_DAEMONS
169  {
170  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
171  if (dbusConn.isConnected()) {
172  // can freeze?
173  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
174  "org.trinitydesktop.hardwarecontrol",
175  "/org/trinitydesktop/hardwarecontrol",
176  "org.trinitydesktop.hardwarecontrol.Power",
177  "CanFreeze");
178  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
179  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
180  return reply[0].toBool();
181  }
182  }
183  }
184 #endif // WITH_TDEHWLIB_DAEMONS
185 
186  return FALSE;
187 }
188 
189 bool TDERootSystemDevice::canSuspend() {
190  TQString statenode = "/sys/power/state";
191  int rval = access (statenode.ascii(), W_OK);
192  if (rval == 0) {
193  if (powerStates().contains(TDESystemPowerState::Suspend)) {
194  return TRUE;
195  }
196  else {
197  return FALSE;
198  }
199  }
200 
201 #ifdef WITH_LOGINDPOWER
202  {
203  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
204  if (dbusConn.isConnected()) {
205  // can suspend?
206  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
207  "org.freedesktop.login1",
208  "/org/freedesktop/login1",
209  "org.freedesktop.login1.Manager",
210  "CanSuspend");
211  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
212  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
213  return (reply[0].toString() == "yes");
214  }
215  }
216  }
217 #endif // WITH_LOGINDPOWER
218 
219 #ifdef WITH_UPOWER
220  {
221  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
222  if (dbusConn.isConnected()) {
223  TQT_DBusProxy upowerProperties("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.DBus.Properties", dbusConn);
224  if (upowerProperties.canSend()) {
225  // can suspend?
226  TQValueList<TQT_DBusData> params;
227  params << TQT_DBusData::fromString(upowerProperties.interface()) << TQT_DBusData::fromString("CanSuspend");
228  TQT_DBusMessage reply = upowerProperties.sendWithReply("Get", params);
229  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
230  return reply[0].toVariant().value.toBool();
231  }
232  }
233  }
234  }
235 #endif// WITH_UPOWER
236 
237 #ifdef WITH_DEVKITPOWER
238  {
239  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
240  if (dbusConn.isConnected()) {
241  TQT_DBusProxy devkitpowerProperties("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power", "org.freedesktop.DBus.Properties", dbusConn);
242  if (devkitpowerProperties.canSend()) {
243  // can suspend?
244  TQValueList<TQT_DBusData> params;
245  params << TQT_DBusData::fromString(devkitpowerProperties.interface()) << TQT_DBusData::fromString("CanSuspend");
246  TQT_DBusMessage reply = devkitpowerProperties.sendWithReply("Get", params);
247  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
248  return reply[0].toVariant().value.toBool();
249  }
250  }
251  }
252  }
253 #endif// WITH_DEVKITPOWER
254 
255 #ifdef WITH_HAL
256  {
257  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
258  if (dbusConn.isConnected()) {
259  TQT_DBusProxy halProperties("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device", dbusConn);
260  if (halProperties.canSend()) {
261  // can suspend?
262  TQValueList<TQT_DBusData> params;
263  TQT_DBusMessage reply;
264  params.clear();
265  params << TQT_DBusData::fromString("power_management.can_suspend");
266  reply = halProperties.sendWithReply("GetPropertyBoolean", params);
267  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
268  return reply[0].toBool();
269  }
270  params.clear();
271  params << TQT_DBusData::fromString("power_management.can_suspend_to_ram");
272  reply = halProperties.sendWithReply("GetPropertyBoolean", params);
273  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
274  return reply[0].toBool();
275  }
276  }
277  }
278  }
279 #endif // WITH_HAL
280 
281 #ifdef WITH_TDEHWLIB_DAEMONS
282  {
283  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
284  if (dbusConn.isConnected()) {
285  // can suspend?
286  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
287  "org.trinitydesktop.hardwarecontrol",
288  "/org/trinitydesktop/hardwarecontrol",
289  "org.trinitydesktop.hardwarecontrol.Power",
290  "CanSuspend");
291  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
292  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
293  return reply[0].toBool();
294  }
295  }
296  }
297 #endif // WITH_TDEHWLIB_DAEMONS
298 
299  return FALSE;
300 }
301 
302 bool TDERootSystemDevice::canHibernate() {
303  TQString statenode = "/sys/power/state";
304  int rval = access (statenode.ascii(), W_OK);
305  if (rval == 0) {
306  if (powerStates().contains(TDESystemPowerState::Hibernate)) {
307  return TRUE;
308  }
309  else {
310  return FALSE;
311  }
312  }
313 
314 #ifdef WITH_LOGINDPOWER
315  {
316  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
317  if (dbusConn.isConnected()) {
318  // can hibernate?
319  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
320  "org.freedesktop.login1",
321  "/org/freedesktop/login1",
322  "org.freedesktop.login1.Manager",
323  "CanHibernate");
324  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
325  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
326  return (reply[0].toString() == "yes");
327  }
328  }
329  }
330 #endif // WITH_LOGINDPOWER
331 
332 #ifdef WITH_UPOWER
333  {
334  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
335  if (dbusConn.isConnected()) {
336  TQT_DBusProxy upowerProperties("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.DBus.Properties", dbusConn);
337  if (upowerProperties.canSend()) {
338  // can hibernate?
339  TQValueList<TQT_DBusData> params;
340  params << TQT_DBusData::fromString(upowerProperties.interface()) << TQT_DBusData::fromString("CanHibernate");
341  TQT_DBusMessage reply = upowerProperties.sendWithReply("Get", params);
342  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
343  return reply[0].toVariant().value.toBool();
344  }
345  }
346  }
347  }
348 #endif// WITH_UPOWER
349 
350 #ifdef WITH_DEVKITPOWER
351  {
352  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
353  if (dbusConn.isConnected()) {
354  TQT_DBusProxy devkitpowerProperties("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power", "org.freedesktop.DBus.Properties", dbusConn);
355  if (devkitpowerProperties.canSend()) {
356  // can hibernate?
357  TQValueList<TQT_DBusData> params;
358  params << TQT_DBusData::fromString(devkitpowerProperties.interface()) << TQT_DBusData::fromString("CanHibernate");
359  TQT_DBusMessage reply = devkitpowerProperties.sendWithReply("Get", params);
360  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
361  return reply[0].toVariant().value.toBool();
362  }
363  }
364  }
365  }
366 #endif// WITH_DEVKITPOWER
367 
368 #ifdef WITH_HAL
369  {
370  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
371  if (dbusConn.isConnected()) {
372  TQT_DBusProxy halProperties("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device", dbusConn);
373  if (halProperties.canSend()) {
374  // can hibernate?
375  TQValueList<TQT_DBusData> params;
376  TQT_DBusMessage reply;
377  params.clear();
378  params << TQT_DBusData::fromString("power_management.can_hibernate");
379  reply = halProperties.sendWithReply("GetPropertyBoolean", params);
380  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
381  return reply[0].toBool();
382  }
383  params.clear();
384  params << TQT_DBusData::fromString("power_management.can_suspend_to_disk");
385  reply = halProperties.sendWithReply("GetPropertyBoolean", params);
386  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
387  return reply[0].toBool();
388  }
389  }
390  }
391  }
392 #endif // WITH_HAL
393 
394 #ifdef WITH_TDEHWLIB_DAEMONS
395  {
396  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
397  if (dbusConn.isConnected()) {
398  // can hibernate?
399  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
400  "org.trinitydesktop.hardwarecontrol",
401  "/org/trinitydesktop/hardwarecontrol",
402  "org.trinitydesktop.hardwarecontrol.Power",
403  "CanHibernate");
404  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
405  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
406  return reply[0].toBool();
407  }
408  }
409  }
410 #endif // WITH_TDEHWLIB_DAEMONS
411 
412  return FALSE;
413 }
414 
415 bool TDERootSystemDevice::canPowerOff() {
416  TDEConfig config("ksmserverrc", true);
417  config.setGroup("General" );
418  if (!config.readBoolEntry( "offerShutdown", true )) {
419  return FALSE;
420  }
421 
422 #ifdef WITH_LOGINDPOWER
423  {
424  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
425  if (dbusConn.isConnected()) {
426  // can power off?
427  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
428  "org.freedesktop.login1",
429  "/org/freedesktop/login1",
430  "org.freedesktop.login1.Manager",
431  "CanPowerOff");
432  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
433  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
434  return (reply[0].toString() == "yes");
435  }
436  }
437  }
438 #endif // WITH_LOGINDPOWER
439 
440 #ifdef WITH_CONSOLEKIT
441  {
442  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
443  if (dbusConn.isConnected()) {
444  // can power off?
445  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
446  "org.freedesktop.ConsoleKit",
447  "/org/freedesktop/ConsoleKit/Manager",
448  "org.freedesktop.ConsoleKit.Manager",
449  "CanStop");
450  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
451  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
452  return reply[0].toBool();
453  }
454  }
455  }
456 #endif // WITH_CONSOLEKIT
457 
458  // FIXME
459  // Can we power down this system?
460  // This should probably be checked via DCOP and therefore interface with TDM
461  // if ( DM().canShutdown() ) {
462  // return TRUE;
463  // }
464  return TRUE;
465 }
466 
467 bool TDERootSystemDevice::canReboot() {
468  TDEConfig config("ksmserverrc", true);
469  config.setGroup("General" );
470  if (!config.readBoolEntry( "offerShutdown", true )) {
471  return FALSE;
472  }
473 
474 #ifdef WITH_LOGINDPOWER
475  {
476  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
477  if (dbusConn.isConnected()) {
478  // can reboot?
479  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
480  "org.freedesktop.login1",
481  "/org/freedesktop/login1",
482  "org.freedesktop.login1.Manager",
483  "CanReboot");
484  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
485  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
486  return (reply[0].toString() == "yes");
487  }
488  }
489  }
490 #endif // WITH_LOGINDPOWER
491 
492 #ifdef WITH_CONSOLEKIT
493  {
494  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
495  if (dbusConn.isConnected()) {
496  // can reboot?
497  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
498  "org.freedesktop.ConsoleKit",
499  "/org/freedesktop/ConsoleKit/Manager",
500  "org.freedesktop.ConsoleKit.Manager",
501  "CanRestart");
502  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
503  if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
504  return reply[0].toBool();
505  }
506  }
507  }
508 #endif // WITH_CONSOLEKIT
509 
510  // FIXME
511  // Can we power down this system?
512  // This should probably be checked via DCOP and therefore interface with TDM
513  // if ( DM().canShutdown() ) {
514  // return TRUE;
515  // }
516  return TRUE;
517 }
518 
519 void TDERootSystemDevice::setHibernationMethod(TDESystemHibernationMethod::TDESystemHibernationMethod hm) {
520  TQString hibernationnode = "/sys/power/disk";
521  TQFile file( hibernationnode );
522  if ( file.open( IO_WriteOnly ) ) {
523  TQString hibernationCommand;
524  if (hm == TDESystemHibernationMethod::Platform) {
525  hibernationCommand = "platform";
526  }
527  if (hm == TDESystemHibernationMethod::Shutdown) {
528  hibernationCommand = "shutdown";
529  }
530  if (hm == TDESystemHibernationMethod::Reboot) {
531  hibernationCommand = "reboot";
532  }
533  if (hm == TDESystemHibernationMethod::TestProc) {
534  hibernationCommand = "testproc";
535  }
536  if (hm == TDESystemHibernationMethod::Test) {
537  hibernationCommand = "test";
538  }
539  TQTextStream stream( &file );
540  stream << hibernationCommand;
541  file.close();
542  return;
543  }
544 
545 #ifdef WITH_TDEHWLIB_DAEMONS
546  {
547  TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
548  if (dbusConn.isConnected()) {
549  TQT_DBusProxy hardwareControl("org.trinitydesktop.hardwarecontrol", "/org/trinitydesktop/hardwarecontrol", "org.trinitydesktop.hardwarecontrol.Power", dbusConn);
550  if (hardwareControl.canSend()) {
551  // set hibernation method
552  TQValueList<TQT_DBusData> params;
553  TQString hibernationCommand;
554  if (hm == TDESystemHibernationMethod::Platform) {
555  hibernationCommand = "platform";
556  }
557  if (hm == TDESystemHibernationMethod::Shutdown) {
558  hibernationCommand = "shutdown";
559  }
560  if (hm == TDESystemHibernationMethod::Reboot) {
561  hibernationCommand = "reboot";
562  }
563  if (hm == TDESystemHibernationMethod::TestProc) {
564  hibernationCommand = "testproc";
565  }
566  if (hm == TDESystemHibernationMethod::Test) {
567  hibernationCommand = "test";
568  }
569  params << TQT_DBusData::fromString(hibernationCommand);
570  TQT_DBusMessage reply = hardwareControl.sendWithReply("SetHibernationMethod", params);
571  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
572  return;
573  }
574  }
575  }
576  }
577 #endif // WITH_TDEHWLIB_DAEMONS
578 
579 }
580 
581 bool TDERootSystemDevice::setPowerState(TDESystemPowerState::TDESystemPowerState ps) {
582  if ((ps == TDESystemPowerState::Standby) || (ps == TDESystemPowerState::Freeze) || (ps == TDESystemPowerState::Suspend) || (ps == TDESystemPowerState::Hibernate)) {
583  TQString statenode = "/sys/power/state";
584  TQFile file( statenode );
585  if ( file.open( IO_WriteOnly ) ) {
586  TQString powerCommand;
587  if (ps == TDESystemPowerState::Standby) {
588  powerCommand = "standby";
589  }
590  if (ps == TDESystemPowerState::Freeze) {
591  powerCommand = "freeze";
592  }
593  if (ps == TDESystemPowerState::Suspend) {
594  powerCommand = "mem";
595  }
596  if (ps == TDESystemPowerState::Hibernate) {
597  powerCommand = "disk";
598  }
599  TQTextStream stream( &file );
600  stream << powerCommand;
601  file.close();
602  return true;
603  }
604 
605 #ifdef WITH_LOGINDPOWER
606  {
607  // No support for "freeze" and "standby" in org.freedesktop.login1
608  TQT_DBusConnection dbusConn;
609  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
610  if ( dbusConn.isConnected() ) {
611  TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
612  "org.freedesktop.login1.Manager", dbusConn);
613  TQValueList<TQT_DBusData> params;
614  params << TQT_DBusData::fromBool(true);
615  if (logindProxy.canSend()) {
616  if (ps == TDESystemPowerState::Suspend) {
617  TQT_DBusMessage reply = logindProxy.sendWithReply("Suspend", params);
618  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
619  return true;
620  }
621  }
622  else if (ps == TDESystemPowerState::Hibernate) {
623  TQT_DBusMessage reply = logindProxy.sendWithReply("Hibernate", params);
624  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
625  return true;
626  }
627  }
628  }
629  }
630  }
631 #endif // WITH_LOGINDPOWER
632 
633 #ifdef WITH_UPOWER
634  {
635  TQT_DBusConnection dbusConn;
636  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
637  if ( dbusConn.isConnected() ) {
638  if (ps == TDESystemPowerState::Suspend) {
639  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
640  "org.freedesktop.UPower",
641  "/org/freedesktop/UPower",
642  "org.freedesktop.UPower",
643  "Suspend");
644  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
645  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
646  return true;
647  }
648  }
649  else if (ps == TDESystemPowerState::Hibernate) {
650  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
651  "org.freedesktop.UPower",
652  "/org/freedesktop/UPower",
653  "org.freedesktop.UPower",
654  "Hibernate");
655  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
656  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
657  return true;
658  }
659  }
660  }
661  }
662 #endif // WITH_UPOWER
663 
664 #ifdef WITH_DEVKITPOWER
665  {
666  TQT_DBusConnection dbusConn;
667  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
668  if ( dbusConn.isConnected() ) {
669  if (ps == TDESystemPowerState::Suspend) {
670  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
671  "org.freedesktop.DeviceKit.Power",
672  "/org/freedesktop/DeviceKit/Power",
673  "org.freedesktop.DeviceKit.Power",
674  "Suspend");
675  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
676  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
677  return true;
678  }
679  }
680  else if (ps == TDESystemPowerState::Hibernate) {
681  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
682  "org.freedesktop.DeviceKit.Power",
683  "/org/freedesktop/DeviceKit/Power",
684  "org.freedesktop.DeviceKit.Power",
685  "Hibernate");
686  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
687  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
688  return true;
689  }
690  }
691  }
692  }
693 #endif // WITH_DEVKITPOWER
694 
695 #ifdef WITH_HAL
696  {
697  TQT_DBusConnection dbusConn;
698  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
699  if ( dbusConn.isConnected() ) {
700  if (ps == TDESystemPowerState::Suspend) {
701  TQT_DBusProxy halPowerManagement(
702  "org.freedesktop.Hal",
703  "/org/freedesktop/Hal/devices/computer",
704  "org.freedesktop.Hal.Device.SystemPowerManagement",
705  dbusConn);
706  TQValueList<TQT_DBusData> params;
707  params << TQT_DBusData::fromInt32(0);
708  TQT_DBusMessage reply = halPowerManagement.sendWithReply("Suspend", params);
709  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
710  return true;
711  }
712  }
713  else if (ps == TDESystemPowerState::Hibernate) {
714  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
715  "org.freedesktop.Hal",
716  "/org/freedesktop/Hal/devices/computer",
717  "org.freedesktop.Hal.Device.SystemPowerManagement",
718  "Hibernate");
719  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
720  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
721  return true;
722  }
723  }
724  }
725  }
726 #endif // WITH_HAL
727 
728 #ifdef WITH_TDEHWLIB_DAEMONS
729  {
730  TQT_DBusConnection dbusConn;
731  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
732  if ( dbusConn.isConnected() ) {
733  if (ps == TDESystemPowerState::Standby) {
734  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
735  "org.trinitydesktop.hardwarecontrol",
736  "/org/trinitydesktop/hardwarecontrol",
737  "org.trinitydesktop.hardwarecontrol.Power",
738  "Standby");
739  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
740  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
741  return true;
742  }
743  }
744  else if (ps == TDESystemPowerState::Freeze) {
745  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
746  "org.trinitydesktop.hardwarecontrol",
747  "/org/trinitydesktop/hardwarecontrol",
748  "org.trinitydesktop.hardwarecontrol.Power",
749  "Freeze");
750  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
751  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
752  return true;
753  }
754  }
755  else if (ps == TDESystemPowerState::Suspend) {
756  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
757  "org.trinitydesktop.hardwarecontrol",
758  "/org/trinitydesktop/hardwarecontrol",
759  "org.trinitydesktop.hardwarecontrol.Power",
760  "Suspend");
761  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
762  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
763  return true;
764  }
765  }
766  else if (ps == TDESystemPowerState::Hibernate) {
767  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
768  "org.trinitydesktop.hardwarecontrol",
769  "/org/trinitydesktop/hardwarecontrol",
770  "org.trinitydesktop.hardwarecontrol.Power",
771  "Hibernate");
772  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
773  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
774  return true;
775  }
776  }
777  }
778  }
779 #endif // WITH_TDEHWLIB_DAEMONS
780 
781  return false;
782  }
783  else if (ps == TDESystemPowerState::PowerOff) {
784  TDEConfig config("ksmserverrc", true);
785  config.setGroup("General" );
786  if (!config.readBoolEntry( "offerShutdown", true )) {
787  return false;
788  }
789 #ifdef WITH_LOGINDPOWER
790  {
791  TQT_DBusConnection dbusConn;
792  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
793  if ( dbusConn.isConnected() ) {
794  TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
795  "org.freedesktop.login1.Manager", dbusConn);
796  TQValueList<TQT_DBusData> params;
797  params << TQT_DBusData::fromBool(true);
798  if (logindProxy.canSend()) {
799  TQT_DBusMessage reply = logindProxy.sendWithReply("PowerOff", params);
800  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
801  return true;
802  }
803  }
804  }
805  }
806 #endif // WITH_LOGINDPOWER
807 #ifdef WITH_CONSOLEKIT
808  {
809  TQT_DBusConnection dbusConn;
810  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
811  if ( dbusConn.isConnected() ) {
812  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
813  "org.freedesktop.ConsoleKit",
814  "/org/freedesktop/ConsoleKit/Manager",
815  "org.freedesktop.ConsoleKit.Manager",
816  "Stop");
817  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
818  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
819  return true;
820  }
821  }
822  }
823 #endif // WITH_CONSOLEKIT
824  // Power down the system using a DCOP command
825  // Values are explained at http://lists.kde.org/?l=kde-linux&m=115770988603387
826  TQByteArray data;
827  TQDataStream arg(data, IO_WriteOnly);
828  arg << (int)0 << (int)2 << (int)2;
829  if ( kapp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
830  return true;
831  }
832  return false;
833  }
834  else if (ps == TDESystemPowerState::Reboot) {
835  TDEConfig config("ksmserverrc", true);
836  config.setGroup("General" );
837  if (!config.readBoolEntry( "offerShutdown", true )) {
838  return false;
839  }
840 #ifdef WITH_LOGINDPOWER
841  {
842  TQT_DBusConnection dbusConn;
843  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
844  if ( dbusConn.isConnected() ) {
845  TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
846  "org.freedesktop.login1.Manager", dbusConn);
847  TQValueList<TQT_DBusData> params;
848  params << TQT_DBusData::fromBool(true);
849  if (logindProxy.canSend()) {
850  TQT_DBusMessage reply = logindProxy.sendWithReply("Reboot", params);
851  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
852  return true;
853  }
854  }
855  }
856  }
857 #endif // WITH_LOGINDPOWER
858 #ifdef WITH_CONSOLEKIT
859  {
860  TQT_DBusConnection dbusConn;
861  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
862  if ( dbusConn.isConnected() ) {
863  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
864  "org.freedesktop.ConsoleKit",
865  "/org/freedesktop/ConsoleKit/Manager",
866  "org.freedesktop.ConsoleKit.Manager",
867  "Restart");
868  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
869  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
870  return true;
871  }
872  }
873  }
874 #endif // WITH_CONSOLEKIT
875  // Power down the system using a DCOP command
876  // Values are explained at http://lists.kde.org/?l=kde-linux&m=115770988603387
877  TQByteArray data;
878  TQDataStream arg(data, IO_WriteOnly);
879  arg << (int)0 << (int)1 << (int)2;
880  if ( kapp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
881  return true;
882  }
883  return false;
884  }
885  else if (ps == TDESystemPowerState::Active) {
886  // Ummm...we're already active...
887  return true;
888  }
889 
890  return false;
891 }
892 
893 #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.13
This website is maintained by Timothy Pearson.