• 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  // No support for "freeze" and "standby" in org.freedesktop.login1
603  TQT_DBusConnection dbusConn;
604  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
605  if ( dbusConn.isConnected() ) {
606  TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
607  "org.freedesktop.login1.Manager", dbusConn);
608  TQValueList<TQT_DBusData> params;
609  params << TQT_DBusData::fromBool(true);
610  if (logindProxy.canSend()) {
611  if (ps == TDESystemPowerState::Suspend) {
612  TQT_DBusMessage reply = logindProxy.sendWithReply("Suspend", params);
613  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
614  return true;
615  }
616  }
617  else if (ps == TDESystemPowerState::Hibernate) {
618  TQT_DBusMessage reply = logindProxy.sendWithReply("Hibernate", params);
619  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
620  return true;
621  }
622  }
623  }
624  }
625  }
626 #endif // WITH_LOGINDPOWER
627 
628 #ifdef WITH_UPOWER
629  {
630  TQT_DBusConnection dbusConn;
631  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
632  if ( dbusConn.isConnected() ) {
633  if (ps == TDESystemPowerState::Suspend) {
634  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
635  "org.freedesktop.UPower",
636  "/org/freedesktop/UPower",
637  "org.freedesktop.UPower",
638  "Suspend");
639  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
640  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
641  return true;
642  }
643  }
644  else if (ps == TDESystemPowerState::Hibernate) {
645  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
646  "org.freedesktop.UPower",
647  "/org/freedesktop/UPower",
648  "org.freedesktop.UPower",
649  "Hibernate");
650  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
651  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
652  return true;
653  }
654  }
655  }
656  }
657 #endif // WITH_UPOWER
658 
659 #ifdef WITH_DEVKITPOWER
660  {
661  TQT_DBusConnection dbusConn;
662  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
663  if ( dbusConn.isConnected() ) {
664  if (ps == TDESystemPowerState::Suspend) {
665  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
666  "org.freedesktop.DeviceKit.Power",
667  "/org/freedesktop/DeviceKit/Power",
668  "org.freedesktop.DeviceKit.Power",
669  "Suspend");
670  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
671  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
672  return true;
673  }
674  }
675  else if (ps == TDESystemPowerState::Hibernate) {
676  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
677  "org.freedesktop.DeviceKit.Power",
678  "/org/freedesktop/DeviceKit/Power",
679  "org.freedesktop.DeviceKit.Power",
680  "Hibernate");
681  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
682  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
683  return true;
684  }
685  }
686  }
687  }
688 #endif // WITH_DEVKITPOWER
689 
690 #ifdef WITH_HAL
691  {
692  TQT_DBusConnection dbusConn;
693  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
694  if ( dbusConn.isConnected() ) {
695  if (ps == TDESystemPowerState::Suspend) {
696  TQT_DBusProxy halPowerManagement(
697  "org.freedesktop.Hal",
698  "/org/freedesktop/Hal/devices/computer",
699  "org.freedesktop.Hal.Device.SystemPowerManagement",
700  dbusConn);
701  TQValueList<TQT_DBusData> params;
702  params << TQT_DBusData::fromInt32(0);
703  TQT_DBusMessage reply = halPowerManagement.sendWithReply("Suspend", params);
704  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
705  return true;
706  }
707  }
708  else if (ps == TDESystemPowerState::Hibernate) {
709  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
710  "org.freedesktop.Hal",
711  "/org/freedesktop/Hal/devices/computer",
712  "org.freedesktop.Hal.Device.SystemPowerManagement",
713  "Hibernate");
714  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
715  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
716  return true;
717  }
718  }
719  }
720  }
721 #endif // WITH_HAL
722 
723 #ifdef WITH_TDEHWLIB_DAEMONS
724  {
725  TQT_DBusConnection dbusConn;
726  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
727  if ( dbusConn.isConnected() ) {
728  if (ps == TDESystemPowerState::Standby) {
729  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
730  "org.trinitydesktop.hardwarecontrol",
731  "/org/trinitydesktop/hardwarecontrol",
732  "org.trinitydesktop.hardwarecontrol.Power",
733  "Standby");
734  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
735  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
736  return true;
737  }
738  }
739  else if (ps == TDESystemPowerState::Freeze) {
740  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
741  "org.trinitydesktop.hardwarecontrol",
742  "/org/trinitydesktop/hardwarecontrol",
743  "org.trinitydesktop.hardwarecontrol.Power",
744  "Freeze");
745  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
746  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
747  return true;
748  }
749  }
750  else if (ps == TDESystemPowerState::Suspend) {
751  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
752  "org.trinitydesktop.hardwarecontrol",
753  "/org/trinitydesktop/hardwarecontrol",
754  "org.trinitydesktop.hardwarecontrol.Power",
755  "Suspend");
756  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
757  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
758  return true;
759  }
760  }
761  else if (ps == TDESystemPowerState::Hibernate) {
762  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
763  "org.trinitydesktop.hardwarecontrol",
764  "/org/trinitydesktop/hardwarecontrol",
765  "org.trinitydesktop.hardwarecontrol.Power",
766  "Hibernate");
767  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
768  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
769  return true;
770  }
771  }
772  }
773  }
774 #endif // WITH_TDEHWLIB_DAEMONS
775 
776  return false;
777  }
778  else if (ps == TDESystemPowerState::PowerOff) {
779  TDEConfig config("ksmserverrc", true);
780  config.setGroup("General" );
781  if (!config.readBoolEntry( "offerShutdown", true )) {
782  return false;
783  }
784 #ifdef WITH_LOGINDPOWER
785  {
786  TQT_DBusConnection dbusConn;
787  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
788  if ( dbusConn.isConnected() ) {
789  TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
790  "org.freedesktop.login1.Manager", dbusConn);
791  TQValueList<TQT_DBusData> params;
792  params << TQT_DBusData::fromBool(true);
793  if (logindProxy.canSend()) {
794  TQT_DBusMessage reply = logindProxy.sendWithReply("PowerOff", params);
795  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
796  return true;
797  }
798  }
799  }
800  }
801 #endif // WITH_LOGINDPOWER
802 #ifdef WITH_CONSOLEKIT
803  {
804  TQT_DBusConnection dbusConn;
805  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
806  if ( dbusConn.isConnected() ) {
807  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
808  "org.freedesktop.ConsoleKit",
809  "/org/freedesktop/ConsoleKit/Manager",
810  "org.freedesktop.ConsoleKit.Manager",
811  "Stop");
812  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
813  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
814  return true;
815  }
816  }
817  }
818 #endif // WITH_CONSOLEKIT
819  // Power down the system using a DCOP command
820  // Values are explained at http://lists.kde.org/?l=kde-linux&m=115770988603387
821  TQByteArray data;
822  TQDataStream arg(data, IO_WriteOnly);
823  arg << (int)0 << (int)2 << (int)2;
824  if ( kapp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
825  return true;
826  }
827  return false;
828  }
829  else if (ps == TDESystemPowerState::Reboot) {
830  TDEConfig config("ksmserverrc", true);
831  config.setGroup("General" );
832  if (!config.readBoolEntry( "offerShutdown", true )) {
833  return false;
834  }
835 #ifdef WITH_LOGINDPOWER
836  {
837  TQT_DBusConnection dbusConn;
838  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
839  if ( dbusConn.isConnected() ) {
840  TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
841  "org.freedesktop.login1.Manager", dbusConn);
842  TQValueList<TQT_DBusData> params;
843  params << TQT_DBusData::fromBool(true);
844  if (logindProxy.canSend()) {
845  TQT_DBusMessage reply = logindProxy.sendWithReply("Reboot", params);
846  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
847  return true;
848  }
849  }
850  }
851  }
852 #endif // WITH_LOGINDPOWER
853 #ifdef WITH_CONSOLEKIT
854  {
855  TQT_DBusConnection dbusConn;
856  dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
857  if ( dbusConn.isConnected() ) {
858  TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
859  "org.freedesktop.ConsoleKit",
860  "/org/freedesktop/ConsoleKit/Manager",
861  "org.freedesktop.ConsoleKit.Manager",
862  "Restart");
863  TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
864  if (reply.type() == TQT_DBusMessage::ReplyMessage) {
865  return true;
866  }
867  }
868  }
869 #endif // WITH_CONSOLEKIT
870  // Power down the system using a DCOP command
871  // Values are explained at http://lists.kde.org/?l=kde-linux&m=115770988603387
872  TQByteArray data;
873  TQDataStream arg(data, IO_WriteOnly);
874  arg << (int)0 << (int)1 << (int)2;
875  if ( kapp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
876  return true;
877  }
878  return false;
879  }
880  else if (ps == TDESystemPowerState::Active) {
881  // Ummm...we're already active...
882  return true;
883  }
884 
885  return false;
886 }
887 
888 #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
  •     tdecore
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  • tdeioslave
  •   http
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdecore by doxygen 1.8.8
This website is maintained by Timothy Pearson.