Τερματισμος, επανεκκινηση, αποσυνδεση με μια εντολη και ερωτηση

Kαλη σαρακοστη σε ολους!

Δεν μπορουσα να βρω καλυτερο τιτλο να καταλαβαινετε, ισως ειμαι πιο περιγραφικος πιο κατω.

Στο kde plasma arch linux αλλα και σε ολες τις διανομες με kde οταν αρχιζεις να το πειραζεις λιγο η να προσθετεις κανενα widget, αυτο προκαλει καθυστερηση καποιον δευτερολεπτων στον τερματισμο λειτουργιας, επανεκκινησης και αποσυνδεσης και δεν μπορω να βρω καποια λυση να το διορθωσω αν και απ οτι καταλαβα αυτο το προβλημα ερχεται απ την sddm του πλασμα.

Τελος παντος απ οτι βλεπω στο κλεισιμο με τερματικο δεν υπαρχει καμια καθυστερηση, για αυτο εβγαλα 3 ‘‘link to applications’’ με δεξι κλικ στην επ.εργασιας οπως διχνει η φωτο, και δουλευουν μια χαρα αφου μεσα στα link εβαλα τις παρακατω εντολες:

shutdown:

shutdown -h now

reboot:

reboot

logout:

kill -9 -1

αν και για logout η σωστη εντολη αν δεν κανω λαθος ειναι η παρακατω για kde αλλα και αυτη κλεινει με καθυστερηση για αυτο χρησιμοποιω kill -9 -1.

qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout 0 0 0

Αυτο που ψαχνω ειναι αν μπορω ολο αυτο να το κανω με καποιο αλλο τροπο ωστε να βγαλω στην επ.εργασιας ενα εικονιδιο με ενα script η κατι αλλο που να εχει τις τρεις εντολες που διχνω σε μια, και να ρωταει τι θελω να επιλεξω, π.χ shutdown, reboot η logout.

Μετα αυτο θα το συρο στο panel του latte και θα ησυχασω απ την καθυστερηση.
Και ετσι οπως το εχω κανει γινεται να πανε στο panel αλλα αντι για τρια διαφορετικα εικονιδια ηθελα να γινει ολο αυτο σε ενα.

Αν έχεις καθυστέρηση ολόκληρων δευτερολέπτων, τότε κατά 99,99999% υπάρχει κάποιο bug στο ή στα widgets και καλό θα ήταν να το αναφέρεις. Έχε όμως υπόψη σου ότι το Latte Dock είναι πρόσθετο στο σύστημα (άρα έξτρα δουλειά για αυτό, ειδικά αν τρέχεις παράλληλα και το default taskbar του Plasma) και τα widgets δεν έχουν σχεδιαστεί απαραίτητα για να δουλεύουν με το Latte.

Γενικότερα για τις περιπτώσεις αποσύνδεσης, τερματισμού κλπ. υπάρχουν δύο βασικοί τρόποι για να γίνουν. Ο πρώτος είναι να πούμε στο σύστημα «ψόφα», όπως κάνεις για παράδειγμα με το kill. Αυτός είναι γρήγορος και μας αρέσει αλλά πρέπει να είναι πάντοτε η τελευταία μας επιλογή. Ο δεύτερος είναι να ακολουθήσουμε τη σωστή διαδικασία (στην περίπτωση του Plasma εμπεριέχει το qdbus που έγραψες). Αυτό δίνει χρόνο στο σύστημα ώστε να σιγουρευτεί ότι τα πάντα έχουν τερματίσει όπως πρέπει και δε θα αφήσει κάτι στη μέση που θα μας βγάλει προβλήματα στο μέλλον.

Επειδή όμως θα τα αγνοήσεις όλα αυτά (μακάρι να μην το κάνεις), πάμε να απαντήσουμε στην ερώτηση. Μπορείς να κάνεις αυτό που θέλεις πολύ εύκολα, με… widget. Δύο ενδεικτικά παραδείγματα:

Εγώ χρησιμοποιώ το δεύτερο και έχω αλλάξει τις προεπιλεγμένες εντολές που έχει (με το χέρι γίνεται αλλά δεν είναι κάτι δύσκολο).

1 «Μου αρέσει»

Ενώ συμφωνώ με Soulrain ότι πιθανότατα υπάρχει κάποιο σοβαρό θέμα από πίσω και θα ήταν καλύτερα να το κοιτάξεις παρά να βάλεις shell script, αυτό εδώ θα κάνει αυτό που ψάχνεις

#!/bin/bash

echo "Διαλέξτε τι θα θέλατε να κάνετε"
echo "1. Τερματισμός λειτουργίας"
echo "2. Αποσύνδεση"
echo "3. Επανεκκίνηση"

read option

if [ "$option" -eq 1 ]; then 
shutdown -h now
fi

if [ "$option" -eq 2 ] then 
kill -9 -1
fi

if [ "$option" -eq 3 ]; then 
reboot
fi

Βάλε το σε ένα αρχείο .sh, κάν’ το και εκτελέσιμο και έτοιμος. Για έξοδο υπάρχει το κλασσικό Control C

Καλή Σαρακοστή!

1 «Μου αρέσει»

Μπορείς να χρησιμοποίσεις το yad(ίσως είναι ήδη εγκατεστημένο) σε ένα script ώστε να εμφανίζεται ένα παράθυρο που να σε ρωτάει τι θέλεις να κάνεις. Κάτι τέτοιο:

#!/bin/bash
opt1="Τερματισμος"
opt2="Επανεκκίνηση"
opt3="Αποσύνδεση"
optQuit="Έξοδος"

function main() 
{
 answer=$(yad --center --width=850 --height=680 --list --radiolist \
  --title="Αποσύνδεση-Τερματισμος-Επανεκκίνηση" \
  --text '<span foreground="green" font="16">Επιλέξτε ενέργεια για εκτελέση:</span>' \
  --column "Επιλογή " \
  --column "Ενέργεια" FALSE "$opt1" FALSE "$opt2" FALSE "$opt3" FALSE "$optQuit")
  echo "${answer:=default}"
  out=$(echo $answer | cut -d '|' -f 2)

  case $out in
  $opt1)
    shutdown -h now
  ;;
  $opt2)
    reboot
  ;;
  $opt3)
    kill -9 -1
  ;;
  $optQuit)
    exit
  ;;
  esac
  }
  
      while :
do
	main 
done
2 «Μου αρέσει»

Ευχαριστω πολυ για τις απαντησεις, δεν το εχω ομως καθολου με script.
Προσπαθησα να καταλαβω κατι αλλα μονο τον χρονο μου σπαταλησα, και τον δικο σας.

@dancaer69 κατεβασα το ‘‘yad’’ και ανοιγει, αλλα δεν ξερω που βοηθαει ακριβως.
Τα opt1,2,3 και optQuit ειναι οι εντολες που θελω να βαλω οπως αναφερω πιο πανω;

Oι εντολες που με ενδιαφερουν ειναι:

Shutdown:
shutdown -h now

Reboot:
reboot

Logout:
qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout 0 0 0

To ιδιο θα ρωτουσα και στον @Kosmas_Raptis για τα ‘‘echo’’. Eπισης τι ονομασια θα εχει το script ακριβως, και σε ποια θεση να ειναι. Για παραδειγμα θελω να ειναι στην επ.εργασιας. Desktop για την ακριβεια. Το user μου ειναι ‘‘dimitris’’.
Θα ηθελα και την εντολη για να γινει εκτελεσιμο.

@anon54176929 κατεβασα το ‘‘USwitchMod’’ και παιδευομαι να αλλαξω τις εντολες τερματισμου κτλ με τις δικες μου στο αρχειο:
.local/share/plasma/plasmoids/org.kde.plasma.uswitcher/contents/ui/main.qml
Mπορεις να βοηθησεις λιγο περισσοτερο;
Οντως εχεις δικιο και εσυ και τα παιδια. ειναι σφαλμα widget η καθυστερηση, η αλλιως του latte-dock και ειναι τοσο ενοχλητικο που πολλες φορες λες καλυτερα να σκοτωνεις τα παντα με ρισκο να παρεις το συστημα στα χερια και να τα κανεις ολα απ την αρχη.
Kαι ναι τρεχω latte-dock και στο πανω panel. Το ‘‘USwitchMod’’ το εβαλα και σε default panel του plasma και δουλευει και στο default οσο και στο latte-dock (task). Τωρα παιδευομε στο ‘‘main.qml’’.

Το δικό μου είναι έτοιμο, έβαλα τις εντολές που είχες. Αφού θέλεις ν’ αλλάξεις το logout, αυτό:

$opt3)
    kill -9 -1
  ;;

θα γίνει:

$opt3)
    qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout 0 0 0
  ;;

Η ονομασία δεν έχει σημασία, ότι θέλεις βάζεις για ονομα. Ούτε κατάλληξη χρειάζεται. Απλά πρέπει να κάνεις το αρχείο εκτελέσιμο. Αφού θέλεις γρήγορη πρόσβαση βάλ’ το στην επιφάνεια εργασίας.

1 «Μου αρέσει»

Δες ένα απόσπασμα με την εντολή της αποσύνδεσης για να καταλάβεις:

            ListDelegate {
                id: leaveButton
                text: i18n("Log Out")
                highlight: delegateHighlight
                icon: "system-log-out"
                onClicked: {
                    executable.exec("qdbus org.kde.ksmserver /KSMServer logout 0 0 0");
                }
            }

Σε ενδιαφέρει βασικά η τελευταία γραμμή με το executable.exec. Για παράδειγμα, αν θέλεις μια επιλογή για τερματισμό όπως έγραψες παραπάνω, μπορείς να κάνεις το αντίστοιχο κομμάτι κάπως έτσι:

            ListDelegate {
                id: shutdown
                text: i18n("Shut Down")
                highlight: delegateHighlight
                icon: "system-shutdown"
                onClicked: {
                    executable.exec("shutdown -h now");
                }
            }

Τι χρειάζεται να προσέξεις: αυτό που υπάρχει για κάθε εντολή στη γραμμή με το id:πρέπει να υπάρχει και στη γραμμή 178 όπου ορίζεται η σειρά των επιλογών. Άρα, για το υποθετικό id: shutdown θα πρέπει να έχεις και το αντίστοιχο shutdown.height.

EDIT: για να λύσεις το πραγματικό πρόβλημα, μπορείς να κάνεις το εξής: αφού αποθηκεύσεις ένα αντίγραφο του αρχείου $HOME/.config/plasma-org.kde.plasma.desktop-appletsrc, διέγραψε το αρχικό και κάνε μια αποσύνδεση-επανασύνδεση. Θα έχεις την προεπιλεγμένη επιφάνεια καθαρή και μπορείς να δοκιμάσεις ένα-ένα τα widgets που θέλεις.

Όταν βρεις ποιο προκαλεί την καθυστέρηση, απλά το αφαιρείς από το αντίγραφο που αποθήκευσες πριν, μεταφέρεις αυτό το αντίγραφο ώστε να γίνει το κανονικό plasma-org.kde.plasma.desktop-appletsrc και δε θα χρειάζεσαι έξτρα κουμπιά για τερματισμούς και τα σχετικά.

2 «Μου αρέσει»

Δες

2 «Μου αρέσει»

To πρωι θα τσεκαρω ξεκουραστος, ειναι πολλα για τωρα! δεν προλαβαινω. Ευχαριστω, ειναι πολυ αναλυτικα ολα οσα γραψατε και νομιζω ειμαι κοντα στην λυση του προβληματος… μαλλον τις αρχικης ερωτησης μου, μιας και το προβλημα θελει πολυ δουλεια αλλα ποτε δεν ξερεις. :slightly_smiling_face:

1 «Μου αρέσει»

@dancaer69 Το script σου ειναι αυτο που χρειαζομουν! Χαρη στο ‘‘yad’’ ανοιγει το παραθυρο ε; Υπαρχει σε ολες τις διανομες;
Παντος δεν ξερω τι ειναι το yad και πρωτη φορα το ακουσα αλλα αν συνεχισει να υπαρχει, ειδα οτι εμπνεει σιγουρια τουλαχιστον στο προβλημα που ενδιαφερει εμενα προς το παρον, μιας και θα κοιταξω τι αλλο μπορω να κερδισω με τα script ξεκινοντας διαβασμα απ αθρα που εγραψε ο @Asfodelus πιο πανω.

@Kosmas_Raptis δεν μπορεσα να το ταιριαξω το δικο σου,μαλλον δεν το καταλαβα, τι να πω.

Εβαλα το παρακατω σε ενα .sh αρχειο με καποιο ονομα αλλα στην πρωτη σειρα echo "Διαλέξτε τι θα θέλατε να κάνετε" δεν ηξερα τι ακριβως να βαλω.
Δες τι εκανα:

    #!/bin/bash

    echo "Choose what you would like to do"
    echo "shutdown -h now"
    echo "kill -9 -1"
    echo "reboot"

    read option

    if [ "$option" -eq 1 ]; then 
    shutdown -h now
    fi

    if [ "$option" -eq 2 ] then 
    kill -9 -1
    fi

    if [ "$option" -eq 3 ]; then 
    reboot
    fi

Οι επιλογες με τα echo βλεπω οτι δουλευουν αν τις εχω μια μια.

@anon54176929 με παιδεψες πολυ μερα που ειναι αλλα ειναι αυτο που κρατησα και μου ταιριαζει περισσοτερο. :smiley:

Αρχικα δεν ειχα καταλαβει τιποτα πριν μιλησεις.

και μου ειχε κανει εντυπωση που δεν υπαρχει μια γραμμη με executable.exec στο default main.qml.

Mετα καλα μου ειπες να κοιταξω το παρακατω:

και το παλευα (καμια 15ρια ωρες) μεχρι να πετυχει και τιποτα. αφου εσπασαν τα νευρα μου γιατι ηθελα αυτο το widget, και σε καθε αλλαγη που δοκιμαζα εκανα επανεκινηση και μετα δεν ανοιγε καν το widget.

Μετα… αφου ηπια και τον δευτερο καφε σκεφτηκα οτι στη γραμμη 178, (που για μενα δεν ειναι 178 αλλα 192 αν θυμαμε καλα) να βαλω με την σειρα την γραμμη + shutdown.Button.height + rebootButton.height + suspendButton.height + leaveButton.height οπως ακριβως ειχα με την ιδια σειρα αντιστοιχα τα ListDelegate και τα id: τους αφου εσβησα κατι id: lockScreenButton κατι τετοια, και τα αντικατεστησα με αυτα που ηθελα. Ελπιζω αυτη η αλλαγη να μην επηρεασει το widget στο μελλον.
Θελω να πω πως σε περιπτωση update του ''USwitchMod'' τι θα γινει; Θα κανω απλα αντικατασταση το σωμενο main.qml και θα ειναι ενταξει;

Tο main.qml:

/*
 *  Copyright 2015 Kai Uwe Broulik <kde@privat.broulik.de>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  2.010-1301, USA.
 */

import QtQuick 2.2
import QtQuick.Controls 1.1 as QtControls
import QtQuick.Layouts 1.1
import QtQuick.Window 2.1

import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.kcoreaddons 1.0 as KCoreAddons // kuser
import org.kde.kquickcontrolsaddons 2.0 // kcmshell
import org.kde.kirigami 2.13 as Kirigami

import org.kde.plasma.private.sessions 2.0 as Sessions

Item {
    id: root
    readonly property bool isVertical: plasmoid.formFactor === PlasmaCore.Types.Vertical

    readonly property string displayedName: showFullName ? kuser.fullName : kuser.loginName

    readonly property bool showFace: plasmoid.configuration.showFace
    readonly property bool showSett: plasmoid.configuration.showSett
    readonly property bool showName: plasmoid.configuration.showName
    property var iconSett: plasmoid.configuration.icon

    readonly property bool showFullName: plasmoid.configuration.showFullName

    // TTY number and X display
    readonly property bool showTechnicalInfo: plasmoid.configuration.showTechnicalInfo

    Plasmoid.switchWidth: units.gridUnit * 10
    Plasmoid.switchHeight: units.gridUnit * 12

    Plasmoid.toolTipTextFormat: Text.StyledText
    Plasmoid.toolTipSubText: i18n("You are logged in as <b>%1</b>", displayedName)

    PlasmaCore.DataSource {
        id: executable
        engine: "executable"
        connectedSources: []
        property var callbacks: ({})
        onNewData: {
            var stdout = data["stdout"]

            if (callbacks[sourceName] !== undefined) {
                callbacks[sourceName](stdout);
            }

            exited(sourceName, stdout)
            disconnectSource(sourceName) // cmd finished
        }

        function exec(cmd, onNewDataCallback) {
            if (onNewDataCallback !== undefined){
                callbacks[cmd] = onNewDataCallback
            }
            connectSource(cmd)

        }
        signal exited(string sourceName, string stdout)

    }

    Binding {
        target: plasmoid
        property: "icon"
        value: kuser.faceIconUrl
        // revert to the plasmoid icon if no face given
        when: !!kuser.faceIconUrl
    }

    KCoreAddons.KUser {
        id: kuser
    }

    Plasmoid.compactRepresentation: MouseArea {
        id: compactRoot

        // Taken from DigitalClock to ensure uniform sizing when next to each other
        readonly property bool tooSmall: plasmoid.formFactor === PlasmaCore.Types.Horizontal && Math.round(2 * (compactRoot.height / 5)) <= theme.smallestFont.pixelSize

        Layout.minimumWidth: isVertical ? 0 : compactRow.implicitWidth
        Layout.maximumWidth: isVertical ? Infinity : Layout.minimumWidth
        Layout.preferredWidth: isVertical ? undefined : Layout.minimumWidth

        Layout.minimumHeight: isVertical ? label.height : theme.smallestFont.pixelSize
        Layout.maximumHeight: isVertical ? Layout.minimumHeight : Infinity
        Layout.preferredHeight: isVertical ? Layout.minimumHeight : theme.mSize(theme.defaultFont).height * 2

        onClicked: plasmoid.expanded = !plasmoid.expanded

        Row {
            id: compactRow

            anchors.centerIn: parent
            spacing: units.smallSpacing

            Kirigami.Avatar {
                id: icon
                width: compactRoot.height
                height: compactRoot.height
                source: visible ? (kuser.faceIconUrl || "user-identity") : ""
                visible: root.showFace
            }

            PlasmaCore.IconItem {
                id: icon2
                width: height
                height: compactRoot.height
                Layout.preferredWidth: height
                source: visible ? (iconSett || "avatar-default-symbolic") : ""
                visible: root.showSett
            }

            PlasmaComponents.Label {
                id: label
                text: root.displayedName
                height: compactRoot.height
                horizontalAlignment: Text.AlignHCenter
                verticalAlignment: Text.AlignVCenter
                wrapMode: Text.NoWrap
                fontSizeMode: Text.VerticalFit
                font.pixelSize: tooSmall ? theme.defaultFont.pixelSize : units.roundToIconSize(units.gridUnit * 2)
                minimumPointSize: theme.smallesFont.pointSize
                visible: root.showName
            }
        }
    }

    Plasmoid.fullRepresentation: Item {
        id: fullRoot

        Layout.preferredWidth: units.gridUnit * 12
        Layout.preferredHeight: Math.min(Screen.height * 0.5, column.contentHeight)

        PlasmaCore.DataSource {
            id: pmEngine
            engine: "powermanagement"
            connectedSources: ["PowerDevil", "Sleep States"]

            function performOperation(what) {
                var service = serviceForSource("PowerDevil")
                var operation = service.operationDescription(what)
                service.startOperationCall(operation)
            }
        }

        Sessions.SessionsModel {
            id: sessionsModel
        }

        Connections {
            target: plasmoid
            onExpandedChanged: {
                if (plasmoid.expanded) {
                    sessionsModel.reload()
                }
            }
        }

        PlasmaComponents.Highlight {
            id: delegateHighlight
            visible: false
            z: -1 // otherwise it shows ontop of the icon/label and tints them slightly
        }

        ColumnLayout {
            id: column

            // there doesn't seem a more sensible way of getting this due to the expanding ListView
            readonly property int contentHeight: aboutComputerItem.height + systemSettingsItem.height + systemMonitorItem.height + 2*separatorItem.height + currentUserItem.height + userList.contentHeight
                                               + (newSessionButton.visible ? newSessionButton.height : 0)
                                               + (lockScreenButton.visible ? lockScreenButton.height : 0)
                                               + shutdown.Button.height + rebootButton.height + suspendButton.height + leaveButton.height

            anchors.fill: parent

            spacing: 0

            ListDelegate {
                id: aboutComputerItem
                text: i18n("About This Computer")
                icon: "help-about"
                highlight: delegateHighlight
                onClicked: {
                    executable.exec("kinfocenter");
                }
            }

            ListDelegate {
                id: systemMonitorItem
                text: i18n("System Monitor")
                icon: "view-process-tree"
                highlight: delegateHighlight
                onClicked: {
                    executable.exec("ksysguard");
                }
            }

            ListDelegate {
                id: systemSettingsItem
                text: i18n("System Settings")
                icon: "settings-configure"
                highlight: delegateHighlight
                onClicked: {
                    executable.exec("systemsettings5");
                }
            }

            Rectangle {
                id: separatorItem
                Layout.alignment: Qt.AlignCenter
                width: parent
                height: units.smallSpacing*2
                opacity: 0
            }

            ListDelegate {
                id: currentUserItem
                text: root.displayedName
                subText: i18n("<i>Current user</i>")
                icon: "user-identity"
                interactive: false
                interactiveIcon: true
                onIconClicked: KCMShell.open("user_manager")
            }

            PlasmaExtras.ScrollArea {
                Layout.fillWidth: true
                Layout.fillHeight: true

                ListView {
                    id: userList
                    model: sessionsModel

                    highlight: PlasmaComponents.Highlight {}
                    highlightMoveDuration: 0

                    delegate: ListDelegate {
                        width: userList.width
                        text: {
                            if (!model.session) {
                                return i18nc("Nobody logged in on that session", "Unused")
                            }

                            if (model.realName && root.showFullName) {
                                return model.realName
                            }

                            return model.name
                        }
                        icon: "user-identity"
                        subText: {
                            if (!root.showTechnicalInfo) {
                                return ""
                            }

                            if (model.isTty) {
                                return i18nc("User logged in on console number", "TTY %1", model.vtNumber)
                            } else if (model.displayNumber) {
                                return i18nc("User logged in on console (X display number)", "on %1 (%2)", model.vtNumber, model.displayNumber)
                            }
                            return ""
                        }

                        onClicked: sessionsModel.switchUser(model.vtNumber, sessionsModel.shouldLock)
                        onContainsMouseChanged: {
                            if (containsMouse) {
                                userList.currentIndex = index
                            } else {
                                userList.currentIndex = -1
                            }
                        }
                    }
                }
            }


            ListDelegate {
                id: newSessionButton
                text: i18n("New Session")
                highlight: delegateHighlight
                visible: sessionsModel.canStartNewSession
                onClicked: sessionsModel.startNewSession(sessionsModel.shouldLock)
            }

            Rectangle {
                id: separatorItem3
                Layout.alignment: Qt.AlignCenter
                width: parent
                height: units.smallSpacing*2
                opacity: 0
            }

            ListDelegate {
                id: shutdownButton
                text: i18n("Shut Down")
                highlight: delegateHighlight
                icon: "system-shutdown"
                onClicked: {
                    executable.exec("shutdown -h now");
                }
            }

            ListDelegate {
                id: rebootButton
                text: i18n("Reboot")
                highlight: delegateHighlight
                icon: "system-reboot"
                onClicked: {
                    executable.exec("reboot");
                }
            }
            
            ListDelegate {
                id: suspendButton
                text: i18n("Suspend")
                highlight: delegateHighlight
                icon: "system-suspend"
                onClicked: pmEngine.performOperation("suspend")
            }

            ListDelegate {
                id: leaveButton
                text: i18nc("Show a dialog with options to logout/shutdown/restart", "Leave...")
                highlight: delegateHighlight
                icon: "system-log-out"
                onClicked: pmEngine.performOperation("requestShutDown")
            }
        }
    }
}

edit:
Θα το ξεχνουσα.
Βασικο!
Με το log out δεν μπορεσα να καταφερω κατι, δε καταλαβα πως πρεπει να το κανω.
Με reboot, shutdown ok.

Το yad όπως και το zenity(του οποίου είναι fork) ουσιαστικά λειτουργεί ως frontend για τα scripts. Απ’ όσο ξέρω υπάρχει στα αποθετήρια όλων των διανομών οπότε δε νομίζω να έχεις πουθενά πρόβλημα να το εγκαταστήσεις.

1 «Μου αρέσει»

Δικό μου λάθος. Επειδή στην προηγούμενη απάντηση είπες ότι πήγες κατευθείαν στο main.qml, υπέθεσα ότι είχες μια γενική ιδέα για το τι να ψάξεις. Το log out μπορείς να το αντιγράψεις όπως είναι από το παράδειγμα παραπάνω. Απλά πρόσεξε να μη λείπει καμία αγκύλη.

Σε περίπτωση update δε θα γίνει τίποτα γιατί ουσιαστικά δεν υπάρχει update παρά μόνο αν βάλεις εσύ κάποια νεότερη έκδοση. Δεν αλλάζει αυτόματα δηλαδή.

Παρεμπιπτόντως, οι αριθμοί στην εντολή με το qdbus μπορούν να αλλάξουν και για επανεκκίνηση, τερματισμό κλπ., αν τυχόν θέλεις να τα έχεις όλα με τον τρόπο που ακολουθεί το Plasma.

Παρεμπιπτόντως 2, για παραθυράκια και διάφορα τέτοια θα σου συνιστούσα και πάλι να ακολουθήσεις τον τρόπο του Plasma, που είναι το kdialog.

Οχι δεν θα το ελεγα, δικο μου ειναι το λαθος γιατι δεν ειχα ρωτησει απο χθες, απ την πρωτη φορα που δεν μου βγηκε. οπως και να εχει ευχαριστω πολυ, και ευχαριστω σε ολους!

Δεν μου ειναι αδιαφορο, απλα θα ψαξω αργοτερα για αυτο το κομματι, αν καταλαβω βεβαια κατι γιατι τα αγγλικα ειναι ενα αγκαθι για μενα οσες φορες τα εχω χρειαστει.

Αυτό το νήμα έκλεισε αυτόματα 2 ημέρες μετά την τελευταία απάντηση. Δεν επιτρέπονται πλέον νέες απαντήσεις.