рд╕рд╕реНрддреЗ рдПрдХрд▓-рдмреЛрд░реНрдб рдкреАрд╕реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдкрддрд▓реА рдЧреНрд░рд╛рд╣рдХ рдмрдирд╛рдирд╛

рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдПрдХ рдЪрд╛рд▓рд╛рдХ рдкрддрд▓рд╛ рдЧреНрд░рд╛рд╣рдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдЕрд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдХрдо рд▓рд╛рдЧрдд рдХреЗ рд╕рд╛рдеред

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд▓рд┐рдирдХреНрд╕ рд╣реИред

рдПрдЖрд░рдПрдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХрд▓-рдмреЛрд░реНрдб рдкреАрд╕реА рдХреЗ рд▓рд┐рдП, рдбреЗрдмрд┐рдпрди рд╢рд╛рдЦрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд░реНрдордмрд┐рдпрди рд╡рд┐рддрд░рдг рд╡реНрдпрд╛рдкрдХ рд╣реИред

рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ OrangePi рд╡рди рдмреЛрд░реНрдб рдерд╛
рдЫрд╡рд┐
рдФрд░ 2G рдкрд░ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдПрд╕рдбреА рдХрд╛рд░реНрдб - рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓реЙрдХ рд╡рд┐рдВрдбреЛ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкрддрд▓реА рдЖрд░рдбреАрдкреА рдЧреНрд░рд╛рд╣рдХ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдЗрд╕ рдмреЛрд░реНрдб рдХреЗ рд▓рд┐рдП рдЖрд░реНрдордмрд┐рдпрди рд╡рд┐рддрд░рдг рдпрд╣рд╛рдБ рд╣реИ ред

рдиреЛрдЯ рдХреЗ рд╕рд╛рде рдЕрдВрддрд┐рдо рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:

рд╕рд░реНрд╡рд░ рдпрд╛ рд▓рд╛рдЗрдЯ рдбреЗрд╕реНрдХрдЯреЙрдк рдЙрдкрдпреЛрдЧ рдкрд░рд┐рджреГрд╢реНрдпред

рдЗрд╕рдореЗрдВ рдПрдХ рдбреЗрд╕реНрдХрдЯреЙрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬреЛ рдкрддрд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред

рд╣рдо рдЫрд╡рд┐ рдХреЛ рдорд╛рдЗрдХреНрд░реЛрдПрд╕рдбреА рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ (рдореИрдВрдиреЗ sourceforge.net/projects/win32diskimager рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ)ред

рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рдж: рдорд╛рдЗрдХреНрд░реЛрдПрд╕рдбреА рдбрд╛рд▓реЗрдВ, рд╕рднреА рдЗрдВрдЯрд░рдлреЗрд╕ (рд▓реИрди, рдбрд┐рд╕реНрдкреНрд▓реЗ, рдХреАрдмреЛрд░реНрдб, рдорд╛рдЙрд╕) рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рдкрд╛рд╡рд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдЗрд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред

рдЬрдм рд╕рд┐рд╕реНрдЯрдо рдмреВрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдбреАрдПрдЪрд╕реАрдкреА рдкрддреЗ рдХреЛ рджреЗрдЦрдХрд░ рдЖрдк рдПрд╕рдПрд╕рдПрдЪ рддрдХ рднреА рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ (рдореИрдВрдиреЗ рдЗрд╕ рдЕрд╡рд╕рд░ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реБрдП рдХреАрдмреЛрд░реНрдб рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдбреНрд░рд╛рдЗрд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдФрд░ рдкреБрдЯреНрдЯреА рд╢реБрд░реВ рдХреА)ред

рд▓реЙрдЧрд┐рди: рд░реВрдЯ
рдкрд╛рд╕рд╡рд░реНрдб: 1234

рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд┐рд╕реНрдЯрдо рдЖрдкрд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдЧрд╛: рд╡рд░реНрддрдорд╛рди 1234 рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рдПрдХ рдирдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рджреЛ рдмрд╛рд░ред

рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рднреА рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ - рдЪрд▓реЛ рдЙрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╣рддреЗ рд╣реИрдВред

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рд▓рд╛рдкрддрд╛ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

apt update apt install xorg lightdm xcursor-themes numix-gtk-theme numix-icon-theme apt install python-gtk2 freerdp 

рд╕рд┐рд╕реНрдЯрдордб рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд┐рдХрд▓ рд▓реЙрдЧрд┐рди рд╢реБрд░реВ рдХрд░рдирд╛ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:

 systemctl set-default graphical.target 

рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдБ:
(рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдирд╛ vi рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ - рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдореБрдЭреЗ рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдлрд┐рд░ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ, рдФрд░ рдЬрдм Esc рджрдмрд╛рдПрдВ рдФрд░ рдЯрд╛рдЗрдк рдХрд░реЗрдВ: рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП w рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП q:

рдПрдХ рдбреАрдПрдЪрд╕реАрдкреА рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

 vi /etc/dhcp/dhclient-exit-hooks.d/paramscript 

 setup_add() { echo $new_host_name > /etc/hostname hostname $new_host_name if [ -z "$new_nds_servers" ] ; then echo $new_routers > /tmp/rdp_server echo "testuser" > /tmp/rdp_user echo "1234test#" > /tmp/rdp_passwd else echo $new_nds_servers > /tmp/rdp_server echo $new_nds_tree_name > /tmp/rdp_user echo $new_nds_context > /tmp/rdp_passwd fi } case $reason in BOUND|RENEW|REBIND|REBOOT) setup_add ;; EXPIRE|FAIL|RELEASE|STOP) return ;; esac 

рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ DHCP рд╣реЛрд╕реНрдЯрдирд╛рдо рдФрд░ nds_servers, nds_tree_name, nds_context рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд░рд╛рдЙрдЯрд░ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

GTK рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрдирд╛рдПрдВ

 vi /home/user/.gtkrc-2.0 

 gtk-icon-theme-name = "Numix" gtk-theme-name = "Numix" gtk-cursor-theme-name = "whiteglass" 

LightDM рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдореИрдиреЗрдЬрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

 vi /etc/lightdm/lightdm.conf 

 [LightDM] greeter-user=user [Seat:*] greeter-session=my-greeter 

рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЧреНрд░реАрдЯрд┐рдВрдЧ (рд▓реЙрдЧрд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдо) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдСрдЯреЛ-рд▓реЙрдЧрд┐рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдЧрд╛ред

рдЕрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╢реЙрд░реНрдЯрдХрдЯ (рдФрд░ рдЙрд╕рдХреЗ рдлрд╝реЛрд▓реНрдбрд░) рдмрдирд╛рдПрдБ:

 mkdir /usr/share/xgreeters/ vi /usr/share/xgreeters/my-greeter.desktop 

 [Desktop Entry] Name=PyGTK+ Greeter Comment=This runs the PyGTK+ greeter, it should only be run from LightDM Exec=python /home/user/greeter.py Type=Application X-Ubuntu-Gettext-Domain=lightdm 

рдФрд░ рд▓реЙрдЧрд┐рди рдХреЛрдб рд╣реА:

 vi /home/user/greeter.py 

рдХреЛрдб 411 рдЕрдВрдХреЛрдВ рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ 0811 (рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рдмрд┐рдирд╛ рдорд╣рддреНрд╡рд╣реАрди рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рдорд╣реАрдиреЗ рдХрд╛ рджрд┐рди)
рд╕рдлрд▓ рдЗрдирдкреБрдЯ рдХреЗ рдмрд╛рдж, xfreerdp рдкреНрд░рд╛рдкреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреЛрдб
 #!/usr/bin/env python # -*- coding: UTF-8 -*- from datetime import datetime from gobject import timeout_add import os,sys,gtk,pango,subprocess class GreeterApp: def __init__( self ): self.builder = gtk.Builder() #self.builder.add_from_file("ui.glade") self.builder.add_from_string(ui) self.window = self.builder.get_object ("window") self.pass_field = self.builder.get_object ("pass_field") self.passct = self.builder.get_object ("pass") self.contrl = self.builder.get_object ("control") self.pass_field.modify_font(pango.FontDescription('Sans Bold 36')) self.passwd = datetime.now().strftime("%m%d") self.rdp_server = open("/tmp/rdp_server").read().split(',')[0] self.rdp_user = open("/tmp/rdp_user").read() self.rdp_passwd = open("/tmp/rdp_passwd").read() self.process = None timeout_add(5000, self.timeout) if self.window: self.window.connect("destroy", gtk.main_quit) self.contrl.set_visible(False) self.window.set_size_request(gtk.gdk.screen_width(),gtk.gdk.screen_height()) self.builder.connect_signals(self) def hide(self, widget): self.contrl.set_visible(False) self.passct.set_visible(True) self.window.move(0,0) self.window.set_size_request(gtk.gdk.screen_width(),gtk.gdk.screen_height()) if self.process: self.process.terminate() self.process = None def timeout(self): if self.window: self.window.set_keep_above(True) self.window.set_modal(True) return True def check_pass(self, widget): if self.pass_field.get_text() == self.passwd: self.pass_field.set_text("") self.passct.set_visible(False) self.contrl.set_visible(True) self.window.set_size_request(50,50) self.window.move(0,gtk.gdk.screen_height()-50) #sys.exit() self.process = subprocess.Popen(["xfreerdp","/v:"+self.rdp_server,"/f","/cert-ignore","/u:"+self.rdp_user,"/p:"+self.rdp_passwd]) def clear_pass(self, widget): self.pass_field.set_text("") def num_press(self, widget): self.pass_field.set_text(self.pass_field.get_text()+widget.get_tooltip_text()) def on_destroy(self, widget): sys.exit() if __name__ == "__main__": settings = gtk.settings_get_default() #settings.props.gtk_button_images = True settings.props.gtk_enable_tooltips = False ui = """ <?xml version="1.0" encoding="UTF-8"?> <interface> <requires lib="gtk+" version="2.24"/> <object class="GtkWindow" id="window"> <property name="can_focus">False</property> <property name="type">popup</property> <property name="title" translatable="yes">MyGreeter</property> <property name="resizable">False</property> <signal name="destroy" handler="on_destroy" swapped="no"/> <child> <object class="GtkVBox" id="vbox1"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkHBox" id="control"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkButton" id="power1"> <property name="use_action_appearance">False</property> <property name="width_request">50</property> <property name="height_request">42</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <signal name="clicked" handler="hide" swapped="no"/> <child> <object class="GtkImage" id="image4"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-no</property> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <placeholder/> </child> <child> <placeholder/> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkHBox" id="hbox1"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkTable" id="pass"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="n_rows">6</property> <property name="n_columns">3</property> <child> <object class="GtkEntry" id="pass_field"> <property name="width_request">240</property> <property name="height_request">60</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="visibility">False</property> <property name="invisible_char">тЧП</property> <property name="xalign">1</property> <property name="invisible_char_set">True</property> <property name="primary_icon_activatable">False</property> <property name="secondary_icon_activatable">False</property> <property name="primary_icon_sensitive">True</property> <property name="secondary_icon_sensitive">True</property> </object> <packing> <property name="right_attach">3</property> <property name="bottom_attach">2</property> <property name="x_options">GTK_SHRINK</property> <property name="y_options">GTK_SHRINK</property> </packing> </child> <child> <object class="GtkButton" id="b_0"> <property name="use_action_appearance">False</property> <property name="width_request">80</property> <property name="height_request">80</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="tooltip_text" translatable="yes">0</property> <signal name="clicked" handler="num_press" swapped="no"/> <child> <object class="GtkLabel" id="l_0"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">0</property> <attributes> <attribute name="weight" value="bold"/> <attribute name="size" value="40000"/> </attributes> </object> </child> </object> <packing> <property name="top_attach">5</property> <property name="bottom_attach">6</property> <property name="x_options">GTK_SHRINK</property> <property name="y_options">GTK_SHRINK</property> </packing> </child> <child> <object class="GtkButton" id="b_1"> <property name="use_action_appearance">False</property> <property name="width_request">80</property> <property name="height_request">80</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="tooltip_text" translatable="yes">1</property> <signal name="clicked" handler="num_press" swapped="no"/> <child> <object class="GtkLabel" id="l_1"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">1</property> <attributes> <attribute name="weight" value="bold"/> <attribute name="size" value="40000"/> </attributes> </object> </child> </object> <packing> <property name="top_attach">4</property> <property name="bottom_attach">5</property> <property name="x_options">GTK_SHRINK</property> <property name="y_options">GTK_SHRINK</property> </packing> </child> <child> <object class="GtkButton" id="b_2"> <property name="use_action_appearance">False</property> <property name="width_request">80</property> <property name="height_request">80</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="tooltip_text" translatable="yes">2</property> <signal name="clicked" handler="num_press" swapped="no"/> <child> <object class="GtkLabel" id="l_2"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">2</property> <attributes> <attribute name="weight" value="bold"/> <attribute name="size" value="40000"/> </attributes> </object> </child> </object> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">4</property> <property name="bottom_attach">5</property> <property name="x_options">GTK_SHRINK</property> <property name="y_options">GTK_SHRINK</property> </packing> </child> <child> <object class="GtkButton" id="b_3"> <property name="use_action_appearance">False</property> <property name="width_request">80</property> <property name="height_request">80</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="tooltip_text" translatable="yes">3</property> <signal name="clicked" handler="num_press" swapped="no"/> <child> <object class="GtkLabel" id="l_3"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">3</property> <attributes> <attribute name="weight" value="bold"/> <attribute name="size" value="40000"/> </attributes> </object> </child> </object> <packing> <property name="left_attach">2</property> <property name="right_attach">3</property> <property name="top_attach">4</property> <property name="bottom_attach">5</property> <property name="x_options">GTK_SHRINK</property> <property name="y_options">GTK_SHRINK</property> </packing> </child> <child> <object class="GtkButton" id="b_4"> <property name="use_action_appearance">False</property> <property name="width_request">80</property> <property name="height_request">80</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="tooltip_text" translatable="yes">4</property> <signal name="clicked" handler="num_press" swapped="no"/> <child> <object class="GtkLabel" id="l_4"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">4</property> <attributes> <attribute name="weight" value="bold"/> <attribute name="size" value="40000"/> </attributes> </object> </child> </object> <packing> <property name="top_attach">3</property> <property name="bottom_attach">4</property> <property name="x_options">GTK_SHRINK</property> <property name="y_options">GTK_SHRINK</property> </packing> </child> <child> <object class="GtkButton" id="b_5"> <property name="use_action_appearance">False</property> <property name="width_request">80</property> <property name="height_request">80</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="tooltip_text" translatable="yes">5</property> <signal name="clicked" handler="num_press" swapped="no"/> <child> <object class="GtkLabel" id="l_5"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">5</property> <attributes> <attribute name="weight" value="bold"/> <attribute name="size" value="40000"/> </attributes> </object> </child> </object> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">3</property> <property name="bottom_attach">4</property> <property name="x_options">GTK_SHRINK</property> <property name="y_options">GTK_SHRINK</property> </packing> </child> <child> <object class="GtkButton" id="b_6"> <property name="use_action_appearance">False</property> <property name="width_request">80</property> <property name="height_request">80</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="tooltip_text" translatable="yes">6</property> <signal name="clicked" handler="num_press" swapped="no"/> <child> <object class="GtkLabel" id="l_6"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">6</property> <attributes> <attribute name="weight" value="bold"/> <attribute name="size" value="40000"/> </attributes> </object> </child> </object> <packing> <property name="left_attach">2</property> <property name="right_attach">3</property> <property name="top_attach">3</property> <property name="bottom_attach">4</property> <property name="x_options">GTK_SHRINK</property> <property name="y_options">GTK_SHRINK</property> </packing> </child> <child> <object class="GtkButton" id="b_7"> <property name="use_action_appearance">False</property> <property name="width_request">80</property> <property name="height_request">80</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="tooltip_text" translatable="yes">7</property> <signal name="clicked" handler="num_press" swapped="no"/> <child> <object class="GtkLabel" id="l_7"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">7</property> <attributes> <attribute name="weight" value="bold"/> <attribute name="size" value="40000"/> </attributes> </object> </child> </object> <packing> <property name="top_attach">2</property> <property name="bottom_attach">3</property> <property name="x_options">GTK_SHRINK</property> <property name="y_options">GTK_SHRINK</property> </packing> </child> <child> <object class="GtkButton" id="b_8"> <property name="use_action_appearance">False</property> <property name="width_request">80</property> <property name="height_request">80</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="tooltip_text" translatable="yes">8</property> <signal name="clicked" handler="num_press" swapped="no"/> <child> <object class="GtkLabel" id="l_8"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">8</property> <attributes> <attribute name="weight" value="bold"/> <attribute name="size" value="40000"/> </attributes> </object> </child> </object> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">2</property> <property name="bottom_attach">3</property> <property name="x_options">GTK_SHRINK</property> <property name="y_options">GTK_SHRINK</property> </packing> </child> <child> <object class="GtkButton" id="b_9"> <property name="use_action_appearance">False</property> <property name="width_request">80</property> <property name="height_request">80</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="tooltip_text" translatable="yes">9</property> <signal name="clicked" handler="num_press" swapped="no"/> <child> <object class="GtkLabel" id="l_9"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">9</property> <attributes> <attribute name="weight" value="bold"/> <attribute name="size" value="40000"/> </attributes> </object> </child> </object> <packing> <property name="left_attach">2</property> <property name="right_attach">3</property> <property name="top_attach">2</property> <property name="bottom_attach">3</property> <property name="x_options">GTK_SHRINK</property> <property name="y_options">GTK_SHRINK</property> </packing> </child> <child> <object class="GtkButton" id="b_ent"> <property name="use_action_appearance">False</property> <property name="width_request">80</property> <property name="height_request">80</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <signal name="clicked" handler="check_pass" swapped="no"/> <child> <object class="GtkImage" id="image2"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-yes</property> </object> </child> </object> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">5</property> <property name="bottom_attach">6</property> <property name="x_options">GTK_SHRINK</property> <property name="y_options">GTK_SHRINK</property> </packing> </child> <child> <object class="GtkButton" id="b_del"> <property name="use_action_appearance">False</property> <property name="width_request">80</property> <property name="height_request">80</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <signal name="clicked" handler="clear_pass" swapped="no"/> <child> <object class="GtkImage" id="image3"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="stock">gtk-no</property> </object> </child> </object> <packing> <property name="left_attach">2</property> <property name="right_attach">3</property> <property name="top_attach">5</property> <property name="bottom_attach">6</property> <property name="x_options">GTK_SHRINK</property> <property name="y_options">GTK_SHRINK</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="expand">True</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </interface> """ app = GreeterApp() app.window.show() gtk.main() 


рдХреЛрдб рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдЖрдк рдмрд╕ рдПрдХ рдЖрд░рдбреАрдкреА рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд░реНрд╡рд░ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд░реНрд╡рд░ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреА рдХрд▓реНрдкрдирд╛ рдореЗрдВ рд╕рдХреНрд╖рдо рд╕рдм рдХреБрдЫ - рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдЗрдирдкреБрдЯ рднреАред

Source: https://habr.com/ru/post/hi420099/


All Articles