-
Notifications
You must be signed in to change notification settings - Fork 25
/
blivet-gui
executable file
·121 lines (89 loc) · 4.23 KB
/
blivet-gui
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Main
#
# Copyright (C) 2014 Red Hat, Inc.
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions of
# the GNU General Public License v.2, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY expressed or implied, including the implied warranties 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
# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the
# source code or documentation are not subject to the GNU General Public
# License and may only be used or replicated with the express permission of
# Red Hat, Inc.
#
# Red Hat Author(s): Vojtech Trefny <[email protected]>
#
# ---------------------------------------------------------------------------- #
import sys
import os
import argparse
import signal
import gettext
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
from blivetgui import __version__, __app_name__
from blivetgui.dialogs.message_dialogs import ErrorDialog
from blivetgui.gui_utils import locate_ui_file
from subprocess import Popen, PIPE
# ---------------------------------------------------------------------------- #
_ = lambda x: gettext.translation("blivet-gui", fallback=True).gettext(x) if x != "" else ""
# ---------------------------------------------------------------------------- #
class RootCheckWindow(object):
def __init__(self):
builder = Gtk.Builder()
builder.add_from_file(locate_ui_file('root_check_window.ui'))
win = builder.get_object("root_window")
win.connect("delete-event", Gtk.main_quit)
button = builder.get_object("button")
button.connect("clicked", Gtk.main_quit)
win.show_all()
def daemon_preexec():
""" Preexec function for blivet-gui-daemon blocking Ctrl-C kill """
signal.signal(signal.SIGINT, signal.SIG_IGN)
def parse_options():
""" Parses command-line arguments passed to blivet_gui
"""
parser = argparse.ArgumentParser(description="blivet-gui")
parser.add_argument("-v", "--version", action="store_true", dest="version", default=False,
help=_("show version information"))
parser.add_argument("--keep-above", action="store_true", dest="keep_above", default=False,
help=_("keep blivet-gui window above other windows"))
parser.add_argument("--auto-dev-updates", action="store_true", dest="auto_dev_updates", default=False,
help="gather all information about devices even if it requires potentially dangerous operation \
like mounting or filesystem check")
parser.add_argument("disks", metavar="disk", type=str, nargs="*",
help="run blivet-gui only on specified disk(s) (optional)")
return parser.parse_args()
def main():
""" Main function, creates a main window instance
"""
options = parse_options()
if options.version:
print(__app_name__, "version", __version__)
sys.exit(0)
else:
p = Popen("pkexec blivet-gui-daemon %d" % os.geteuid(), # pylint: disable=subprocess-popen-preexec-fn
stdout=PIPE, shell=True, preexec_fn=daemon_preexec)
output = p.stdout.readline()
# we expect exactly one parameter
if len(output.split()) != 1:
ErrorDialog(parent_window=None, msg=_("Failed to start blivet-gui-daemon."))
sys.exit(1)
else:
from blivetgui.blivetgui import BlivetGUI
from blivetgui.communication.client import BlivetGUIClient
sockfile = output.split()[0]
client = BlivetGUIClient(server_socket=sockfile)
BlivetGUI(client, exclusive_disks=options.disks, keep_above=options.keep_above, auto_dev_updates=options.auto_dev_updates)
if __name__ == '__main__':
signal.signal(signal.SIGINT, signal.SIG_DFL)
main()
Gtk.main()