diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3716db2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +ublexec.glade~ +test.cpp +.vscode +ublexec \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..69aebbf --- /dev/null +++ b/Makefile @@ -0,0 +1,136 @@ +#!/usr/bin/make -f +#!/usr/bin/make -f + +#SHELL := /bin/bash +MAKEFILE_FILEPATH := $(abspath $(lastword $(MAKEFILE_LIST))) +MAKEFILE_DIR := $(notdir $(patsubst %/,%,$(dir $(MAKEFILE_FILEPATH)))) +MAKEFILE_PATH := $(dir $(MAKEFILE_FILEPATH)) + +CMAKE_COMMAND = cmake +#CMAKE_SOURCE_DIR = $(MAKEFILE_PATH)source +#CMAKE_BUILD_DIR = $(MAKEFILE_PATH)compile +CMAKE_SOURCE_DIR = ./source +CMAKE_BUILD_DIR = ./compile +DEPENDS = cmake +#PKGNAME = $(MAKEFILE_DIR) +PKGNAME = ublexec + +default_target: all +all: init build + +init: + @echo "Initialize ..."; \ + echo "-- Build path: ${CMAKE_BUILD_DIR}" + +depend: + @echo "Check depends ..."; \ + if [ ! -f /bin/${DEPENDS} ]; then \ + echo "-- Depend '${DEPENDS}' not fount !"; \ + exit 1; \ + fi; \ + echo "Check depends: OK" +# $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 + +debug: + @echo "Debug ..." + if [ ! -d ${CMAKE_BUILD_DIR} ]; then \ + $(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX="/usr"; \ + fi; \ + echo "Debug: OK" + +prepare: + @echo "Prepare ..."; \ + if [ ! -d ${CMAKE_BUILD_DIR} ]; then \ + $(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="/usr"; \ + fi; \ + echo "Prepare: OK" + +check: + @echo "Check ..."; \ + if [ -f ${CMAKE_BUILD_DIR}/${PKGNAME} ]; then \ + echo "Check: OK"; \ + else \ + echo "Check: ${CMAKE_BUILD_DIR}/${PKGNAME} not fount !"; \ + exit 1; \ + fi + +build: depend prepare + @echo "Build ..."; \ + make --directory=${CMAKE_BUILD_DIR}; \ + echo "Build: OK" + +uninstall: + @echo "Uninstall ..." + @for FILE_PO in $(wildcard *.po); do \ + LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \ + FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \ + PATH_FILE_MO="/usr/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ + $(RM) "/usr/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ + done +# @for SIZE in 16x16 32x32 48x48 scalable; do \ + $(RM) "/usr/share/icons/hicolor/$${SIZE}/apps/${PKGNAME}.svg"; \ + $(RM) "/usr/share/icons/hicolor/$${SIZE}/apps/${PKGNAME}.png"; \ + done +# @for FILE_SVG in $(wildcard *.svg); do \ + for SIZE in 16x16 32x32 48x48 scalable; do \ + $(RM) "/usr/share/icons/hicolor/$${SIZE}/status/$${FILE_SVG%.*}".{svg,png,jpg}; \ + done; \ + done + @$(RM) "/usr/bin/${PKGNAME}" + @$(RM) "/usr/share/applications/${PKGNAME}.desktop" + @$(RM) "/usr/share/polkit-1/actions/ru.ublinux.pkexec.${PKGNAME}.exec.policy" + @$(RM) -rd "/usr/share/${PKGNAME}" + @gtk-update-icon-cache -fiq /usr/share/icons/hicolor/ &>/dev/null + @update-desktop-database --quiet 2>/dev/null + @touch /usr/share/applications + @echo "Uninstall: OK" + +install: check uninstall + @echo "Install ..." + @for FILE_PO in $(wildcard *.po); do \ + LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \ + install -dm755 /usr/share/locale/$${LANG}/LC_MESSAGES; \ + FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \ + PATH_FILE_MO="/usr/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ + echo $${FILE_PO}; \ + msgfmt "$${FILE_PO}" -v -f -o "$${PATH_FILE_MO}"; \ + done + @for SIZE in 16 32 48; do \ + install -dm755 /usr/share/icons/hicolor/$${SIZE}x$${SIZE}/apps; \ + rsvg-convert -w $${SIZE} -h $${SIZE} -f svg --keep-image-data ${PKGNAME}.svg -o "/usr/share/icons/hicolor/$${SIZE}x$${SIZE}/apps/${PKGNAME}.svg"; \ + done + @install -dm755 /usr/share/icons/hicolor/scalable/apps + @install -Dm644 -t /usr/share/icons/hicolor/scalable/apps/ ${PKGNAME}.svg + @install -Dm755 -t /usr/bin/ ${CMAKE_BUILD_DIR}/${PKGNAME} + @install -Dm644 -t /usr/share/applications/ ${PKGNAME}.desktop + @install -Dm644 -t /usr/share/polkit-1/actions/ org.ublinux.pkexec.${PKGNAME}.exec.policy + @install -dm755 /usr/share/${PKGNAME}/{ui,css,images} + @install -Dm644 -t /usr/share/${PKGNAME}/ui/ ${PKGNAME}.glade + @install -Dm644 -t /usr/share/${PKGNAME}/css/ style.css + @install -Dm644 -t /usr/share/${PKGNAME}/images/ bg_top.png + @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.svg +# @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.png + @gtk-update-icon-cache -fiq /usr/share/icons/hicolor/ + @update-desktop-database --quiet 2>/dev/null + @touch /usr/share/applications + @echo "Install: OK" + +clean: + @echo "Clean ..." + @$(RM) -rd ${CMAKE_BUILD_DIR} + @if [ -d ${CMAKE_BUILD_DIR} ]; then \ + echo "Clean: error, compile directory exist ${CMAKE_BUILD_DIR}"; \ + else \ + echo "Clean: OK"; \ + fi + +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... init" + @echo "... debug" + @echo "... prepare" + @echo "... compile" + @echo "... install" + @echo "... uninstall" + @echo "... clean" \ No newline at end of file diff --git a/README.md b/README.md index 141ec06..eacfcda 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,28 @@ # ublexec +# Выполнить +# Build +In order to build ublexec you will need: + +- CMake +- C compiler +- GTK+ 3 & dependencies + +Once you have all the necessary dependencies, you can use: +```sh +$ make +``` + +# Installation +After a successful build, just use: +```sh +$ sudo make install clean +``` + +# Uninstallation +After a successful build, just use: +```sh +$ sudo make uninstall +``` + +![alt text](screenshot/screenshot.png) diff --git a/bg_top.png b/bg_top.png new file mode 100644 index 0000000..8eb67cb Binary files /dev/null and b/bg_top.png differ diff --git a/org.ublinux.pkexec.ublexec.exec.policy b/org.ublinux.pkexec.ublexec.exec.policy new file mode 100644 index 0000000..3664113 --- /dev/null +++ b/org.ublinux.pkexec.ublexec.exec.policy @@ -0,0 +1,24 @@ + + + + + UBLinux + https://ublinux.ru + + + Run "ublexec" as root + Запус "Выполнить" с правами root + Authentication is required to run ublexec + Требуется авторизация для запуска "Выполнить" с правами root + + auth_admin + auth_admin + auth_admin + + /usr/bin/ublexec + true + + + diff --git a/screenshot/screenshot.png b/screenshot/screenshot.png new file mode 100644 index 0000000..1b575f2 Binary files /dev/null and b/screenshot/screenshot.png differ diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt new file mode 100644 index 0000000..82357c3 --- /dev/null +++ b/source/CMakeLists.txt @@ -0,0 +1,28 @@ +cmake_minimum_required(VERSION 3.7) +project(ublexec) + +find_package(PkgConfig REQUIRED) + +pkg_check_modules(GTK REQUIRED gtkmm-3.0) +include_directories(${GTK_INCLUDE_DIRS}) +link_directories(${GTK_LIBRARY_DIRS}) +add_definitions(${GTK_CFLAGS_OTHER}) +find_package(Threads REQUIRED) + +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -std=c++2a -g") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wmissing-declarations -fdiagnostics-color=always") +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(SOURCE_FILES + main.cc + ublexec.cc + ublexec.h) + +set(LIBRARIES + ${GTK_LIBRARIES} + pthread) + +add_executable(ublexec ${SOURCE_FILES}) +target_link_libraries(ublexec ${LIBRARIES} Threads::Threads) +install(TARGETS ublexec DESTINATION bin) diff --git a/source/main.cc b/source/main.cc new file mode 100644 index 0000000..0995b90 --- /dev/null +++ b/source/main.cc @@ -0,0 +1,68 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ublexec.h" + + + + + +int main(int argc, char** argv) +{ + + string str_cmd_argv = ""; + for (int i=1; irun(plug); + return 0; + } + else { + + MainWindow* wnd = nullptr; + builder->get_widget_derived("window", wnd); + auto r = app->run(*wnd); + delete wnd; + return r; + } + +} diff --git a/source/ublexec.cc b/source/ublexec.cc new file mode 100644 index 0000000..10eb8dc --- /dev/null +++ b/source/ublexec.cc @@ -0,0 +1,696 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ublexec.h" +using namespace std; + +string path_app= "/usr/bin/"; +string path_glade= "/usr/share/ublexec/ui/ublexec.glade"; +string path_css = "/usr/share/ublexec/css/style.css"; +string app_name = "ublexec"; +CmdArgParser::CmdArgParser(const std::string& p_name, const std::string& p_description, const std::string& p_help) +: Glib::OptionGroup{p_name, p_description, p_help} { + Glib::OptionEntry socketIDArg; + socketIDArg.set_long_name("socket-id"); + socketIDArg.set_short_name('s'); + socketIDArg.set_flags(Glib::OptionEntry::FLAG_IN_MAIN); + socketIDArg.set_description("Settings manager socket"); + add_entry(socketIDArg, m_socketID); +} +::Window CmdArgParser::GetSocketID() const{ + return m_socketID; +} + +MainWindow::MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder) + : Gtk::ApplicationWindow(obj), builder{builder} { + this->builder = builder; + this->settings(); +} + +MainWindow::MainWindow(Glib::RefPtr const& builder) { + this->builder = builder; + this->settings(); +} + +void MainWindow::get_builder(){ + builder->get_widget("btnFilemaneg", btnFilemaneg); + builder->get_widget("btnListApp", btnListApp); + builder->get_widget("btnStart", btnStart); + builder->get_widget("chbTerminal", chbTerminal); + builder->get_widget("chbAnotherUser", chbAnotherUser); + builder->get_widget("cbxExecuteEpriority", cbxExecuteEpriority); + builder->get_widget("cmbUser", cmbUser); + builder->get_widget("spinPriority", spinPriority); + builder->get_widget("scalePriority", scalePriority); + builder->get_widget("rbPkexec", rbPkexec); + builder->get_widget("rbSu", rbSu); + builder->get_widget("rbSudo", rbSudo); + builder->get_widget("txtCmd", txtCmd); + builder->get_widget("wndChooseFileWallpaper", wndChooseFileWallpaper); + builder->get_widget("btnFilemangerExit", btnFilemangerExit); + builder->get_widget("btnFilemangerOk", btnFilemangerOk); + builder->get_widget("lblTimeEpriorityLow", lblTimeEpriorityLow); + builder->get_widget("lblTime4EpriorityHigh", lblTime4EpriorityHigh); + builder->get_widget("messageError", messageError); + builder->get_widget("lblMessageError", lblMessageError); + builder->get_widget("btnMessageErrorOk", btnMessageErrorOk); + builder->get_widget("btnMessageErrorOk", btnMessageErrorOk); + builder->get_widget("btnMessageErrorOk", btnMessageErrorOk); + builder->get_widget("dialogStartMenu", dialogStartMenu); + builder->get_widget("btnStartMenuOK", btnStartMenuOK); + builder->get_widget("btnStartMenuExit", btnStartMenuExit); + builder->get_widget("lblInfoHead", lblInfoHead); + builder->get_widget("lblinfoCmd", lblinfoCmd); + builder->get_widget("lblInfoTime", lblInfoTime); + builder->get_widget("labInfoExecutTerm", labInfoExecutTerm); + builder->get_widget("lblInfoUser", lblInfoUser); + builder->get_widget("lblInfoUserOther", lblInfoUserOther); + builder->get_widget("lblInfoUserName", lblInfoUserName); + builder->get_widget("lblInfoNooPriority", lblInfoNooPriority); + builder->get_widget("lblInfoExec", lblInfoExec); + builder->get_widget("lblInfoPriority", lblInfoPriority); + builder->get_widget("lblInfoEnterProg", lblInfoEnterProg); + builder->get_widget("boxColor", boxColor); + builder->get_widget("lblGraphics", lblGraphics); + builder->get_widget("lblTools", lblTools); + builder->get_widget("lblInternet", lblInternet); + builder->get_widget("lblMultimedia", lblMultimedia); + builder->get_widget("lblSettings", lblSettings); + builder->get_widget("lblEducation", lblEducation); + builder->get_widget("lblOffice", lblOffice); + builder->get_widget("lblOther", lblOther); + builder->get_widget("lblDevelopment", lblDevelopment); + builder->get_widget("iconGraphics", iconGraphics); + builder->get_widget("iconTools", iconTools); + builder->get_widget("iconInternet", iconInternet); + builder->get_widget("iconMultimedia", iconMultimedia); + builder->get_widget("iconSettings", iconSettings); + builder->get_widget("iconEducation", iconEducation); + builder->get_widget("iconOffice", iconOffice); + builder->get_widget("iconOther", iconOther); + builder->get_widget("iconDevelopment", iconDevelopment); + builder->get_widget("iconSystem", iconSystem); + builder->get_widget("lblSystem", lblSystem); +} + +void MainWindow::set_icon_array(){ + array_icon[0]=this->iconGraphics; + array_icon[1]=this->iconTools; + array_icon[2]=this->iconInternet; + array_icon[3]=this->iconMultimedia; + array_icon[4]=this->iconSettings; + array_icon[5]=this->iconEducation; + array_icon[6]=this->iconOffice; + array_icon[7]=this->iconOther; + array_icon[8]=this->iconDevelopment; + array_icon[9]=this->iconSystem; +} + + +void MainWindow::template_apps_obj(Gtk::IconView *icon, Glib::RefPtr >k_list_app){ + gtk_list_app = Gtk::ListStore::create(m_Columns); + gtk_list_app->set_sort_column(m_Columns.m_col_description, Gtk::SORT_ASCENDING); + icon->set_model(gtk_list_app); + icon->set_markup_column(m_Columns.m_col_description); + icon->set_pixbuf_column(m_Columns.m_col_pixbuf); +} + + +void MainWindow::add_CSS(){ + + Glib::RefPtr cssProvider = Gtk::CssProvider::create(); + cssProvider->load_from_path(path_css); + Glib::RefPtr styleContext = Gtk::StyleContext::create(); + Glib::RefPtr screen = Gdk::Screen::get_default();//get default screen + styleContext->add_provider_for_screen(screen, cssProvider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);//add provider for screen in all application + Glib::RefPtr context_box = boxColor->get_style_context(); + Glib::RefPtr context_lbl_head = lblInfoHead->get_style_context(); + context_box->add_class("cssboxColor1"); + context_lbl_head->add_class("textHead"); + +} + +void MainWindow::localization(){ + this->set_title(gettext("ublexec")); + btnStart->set_label(gettext("Run")); + wndChooseFileWallpaper->set_title(gettext("Please select File")); + dialogStartMenu->set_title(gettext("Selecting Programs")); + lblInfoHead->set_text(gettext("Running applications as a user with a\nspecified priority")); + lblinfoCmd->set_text(gettext("Command Line")); + lblInfoTime->set_text(gettext("Team")); + labInfoExecutTerm->set_text(gettext("Run in the terminal emulator")); + lblInfoUser->set_text(gettext("User")); + lblInfoUserOther->set_text(gettext("Run as another user")); + lblInfoUserName->set_text(gettext("User Name")); + lblInfoNooPriority->set_text(gettext("Priority")); + lblInfoExec->set_text(gettext("Change startup priority")); + lblInfoPriority->set_text(gettext("Priority")); + lblMessageError->set_text(gettext("Select an executable file or program")); + lblInfoEnterProg->set_text(gettext("Selecting Programs")); + lblGraphics->set_text(gettext("Graphics")); + lblTools->set_text(gettext("Tools")); + lblInternet->set_text(gettext("Internet")); + lblMultimedia->set_text(gettext("Multimedia")); + lblSettings->set_text(gettext("Settings")); + lblEducation->set_text(gettext("Education")); + lblOffice->set_text(gettext("Office")); + lblOther->set_text(gettext("Other")); + lblDevelopment->set_text(gettext("Development")); + lblSystem->set_text(gettext("System")); +} + +void MainWindow::event(){ + btnFilemaneg->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::open_filemaneg)); + btnListApp->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::open_list_app)); + btnStart->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::start_cmd)); + cmbUser->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::changed_user)); + //chbTerminal->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::execute_terminal)); + chbAnotherUser->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::activ_or_block_other_user)); + spinPriority->signal_value_changed().connect(sigc::mem_fun(*this, &MainWindow::change_scale_priority)); + scalePriority->signal_value_changed().connect(sigc::mem_fun(*this, &MainWindow::change_spin_priority)); + btnFilemangerExit->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::close_filemaneg)); + btnFilemangerOk->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::get_path_filemaneg)); + cbxExecuteEpriority->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::activ_or_block_execute_epriority)); + btnMessageErrorOk->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::message_gui_close)); + btnStartMenuOK->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::start_menu_entry_app)); + btnStartMenuExit->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::close_entry_app)); + btnStartMenuOK->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::ok_close_entry_app)); + iconGraphics->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Graphics)); + iconTools->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Tools)); + iconInternet->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Internet)); + iconMultimedia->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Multimedia)); + iconSettings->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Settings)); + iconEducation->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Education)); + iconOffice->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Office)); + iconOther->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Other)); + iconDevelopment->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Development)); + iconSystem->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_System)); +} + +void MainWindow::icon_clear(){ + list_Graphics->clear(); + list_Tools->clear(); + list_Internet->clear(); + list_Multimedia->clear(); + list_Settings->clear(); + list_Education->clear(); + list_Graphics->clear(); + list_Office->clear(); + list_Other->clear(); + list_Development->clear(); + list_System->clear(); +} + +void MainWindow::ok_close_entry_app(){ + this->icon_clear(); + dialogStartMenu->hide(); +} + +void MainWindow::select_Graphics(){ + this->tempate_icon_select(this->iconGraphics,list_Graphics); +} +void MainWindow::select_Tools(){ + this->tempate_icon_select(this->iconTools,list_Tools); +} +void MainWindow::select_Internet(){ + this->tempate_icon_select(this->iconInternet,list_Internet); +} +void MainWindow::select_Multimedia(){ + this->tempate_icon_select(this->iconMultimedia,list_Multimedia); +} +void MainWindow::select_Settings(){ + this->tempate_icon_select(this->iconSettings,list_Settings); +} +void MainWindow::select_Education(){ + this->tempate_icon_select(this->iconEducation,list_Education); +} +void MainWindow::select_Office(){ + this->tempate_icon_select(this->iconOffice,list_Office); +} +void MainWindow::select_Other(){ + this->tempate_icon_select(this->iconOther,list_Other); +} +void MainWindow::select_Development(){ + this->tempate_icon_select(this->iconDevelopment,list_Development); +} +void MainWindow::select_System(){ + this->tempate_icon_select(this->iconSystem,list_System); +} +void MainWindow::tempate_icon_select(Gtk::IconView *icon, Glib::RefPtr >k_list){ + auto selected = (*icon).get_selected_items(); + if(!selected.empty()) + { + this->set_icon_array(); + this->unselect_icon(icon); + const Gtk::TreeModel::Path& path = *selected.begin(); + Gtk::TreeModel::iterator iter = gtk_list->get_iter(path); + Gtk::TreeModel::Row row = *iter; + auto app_name_exec = row[m_Columns.app_name_exec]; + const Glib::ustring description = row[m_Columns.m_col_description]; + txtCmd->set_text(app_name_exec); + name_app = txtCmd->get_text(); + int len_name_app = name_app.length(); + string array_del[] = {"%f","%F","%d","%D","%n","%N","%U"}; + for (auto &del_sim: array_del){ + str_remove(name_app, del_sim); + if (name_app.length()!=len_name_app){ + txtCmd->set_text(name_app); + break; + } + } + } +} + +void MainWindow::unselect_icon(Gtk::IconView *icon_entry){ + for (int index=0; index<10; ++index){ + Gtk::IconView *icon = this->array_icon[index]; + if (icon_entry!=icon){ + icon->unselect_all(); + } + } +} + +void MainWindow::settings(){ + this->pars_apps(); + this->get_builder(); + this->event(); + this->localization(); + this->add_CSS(); + spinPriority->set_range(0,19); + spinPriority->set_increments(1.0,-1.0); + scalePriority->set_range(0,19); + scalePriority->set_value(0); + lblTimeEpriorityLow->set_text("19 (Низкий)"); + lblTime4EpriorityHigh->set_text("0 (Высокий)"); + scalePriority->set_inverted(true); + this->pars_dir_bin(); + this->pars_users(); + this->activ_or_block_execute_epriority(); + this->changed_user(); + cmbUser->set_active(0); + cmbUser->set_sensitive(false); + lblInfoUserName->set_sensitive(false); + rbPkexec->set_sensitive(false); + rbSu->set_sensitive(false); + rbSudo->set_sensitive(false); + + //Gtk::Widget *standartHead; + //Gtk::Widget *plugBox; + //Gtk::Window *window; + //Gtk::Widget *btnSave; + //builder->get_widget("standartHead",standartHead); + //builder->get_widget("plugBox",plugBox); + //builder->get_widget("window",window); + //builder->get_widget("btnSave",btnSave); + //ubl_get_standard_ui(standartHead,plugBox,btnSave,window,"ublexec.svg",gettext("Running applications as a user with a\nspecified priority"),gettext("ublexec"),0,0); + +} +void MainWindow::close_entry_app(){ + this->icon_clear(); + dialogStartMenu->hide(); +} + +void MainWindow::start_menu_entry_app(){} + +void MainWindow::message_gui_close(){ + messageError->hide(); +} + +void MainWindow::activ_or_block_execute_epriority(){ + bool flag = cbxExecuteEpriority->get_active(); + scalePriority->set_sensitive(flag); + spinPriority->set_sensitive(flag); + lblInfoNooPriority->set_sensitive(flag); + lblTimeEpriorityLow->set_sensitive(flag); + lblTime4EpriorityHigh->set_sensitive(flag); +} + +void MainWindow::open_filemaneg(){ + wndChooseFileWallpaper->show(); +} + +void MainWindow::close_filemaneg(){ + wndChooseFileWallpaper->hide(); +} + +void MainWindow::get_path_filemaneg(){ + path_file = wndChooseFileWallpaper->get_filename(); + if (path_file.length()==0){} + else{ + txtCmd->set_text(path_file); + this->close_filemaneg(); + } +} + +void MainWindow::tempalte_row(string Name, string Exec, string path , Glib::RefPtr &dtk_list){ + Gtk::TreeModel::Row row = *(dtk_list->append()); + row[m_Columns.m_col_filename] = path; + row[m_Columns.m_col_description] = Name; + row[m_Columns.app_name_exec] = Exec; + if (std::ifstream(path)){ + row[m_Columns.m_col_pixbuf] = Gdk::Pixbuf::create_from_file(path); + } + else{ + path = "/usr/share/icons/Faenza/emblems/16/emblem-danger.png"; + row[m_Columns.m_col_pixbuf] = Gdk::Pixbuf::create_from_file(path); + } +} + +void MainWindow::open_list_app(){ + this->template_apps_obj(iconGraphics, list_Graphics); + this->template_apps_obj(iconTools, list_Tools); + this->template_apps_obj(iconInternet, list_Internet); + this->template_apps_obj(iconMultimedia, list_Multimedia); + this->template_apps_obj(iconSettings, list_Settings); + this->template_apps_obj(iconEducation, list_Education); + this->template_apps_obj(iconOffice, list_Office); + this->template_apps_obj(iconOther, list_Other); + this->template_apps_obj(iconDevelopment, list_Development); + this->template_apps_obj(iconSystem, list_System); + string path = ""; + for ( const auto &st_app : list_app){ + for ( const auto &str_categor : st_app.Categories){ + path = "/usr/share/icons/hicolor/16x16/apps/" + st_app.Icon + ".png"; + if (str_categor=="Graphics"){ + this->tempalte_row(st_app.Name,st_app.Exec, path, list_Graphics); + } + else if (str_categor=="Utility"){ + this->tempalte_row(st_app.Name,st_app.Exec, path, list_Tools); + } + else if (str_categor=="Network"){ + this->tempalte_row(st_app.Name,st_app.Exec, path,list_Internet); + } + else if (str_categor== "AudioVideo"){ + this->tempalte_row(st_app.Name,st_app.Exec, path, list_Multimedia); + } + else if (str_categor=="Settings"){ + this->tempalte_row(st_app.Name,st_app.Exec, path, list_Settings); + } + else if (str_categor=="Education"){ + this->tempalte_row(st_app.Name,st_app.Exec, path, list_Education); + } + else if (str_categor=="Office"){ + this->tempalte_row(st_app.Name,st_app.Exec, path, list_Office); + } + else if (str_categor=="Other"){ + this->tempalte_row(st_app.Name,st_app.Exec, path, list_Other); + } + else if (str_categor=="Development"){ + this->tempalte_row(st_app.Name,st_app.Exec, path, list_Development); + } + else if (str_categor=="System"){ + this->tempalte_row(st_app.Name,st_app.Exec, path, list_System); + } + + } + } + dialogStartMenu->show_all(); +} + + +void MainWindow::start_cmd(){ + string str_cmd_terminal=""; + string str_variants_root = ""; + string str_nice_cmd = ""; + string user_cmd = ""; + if (name_app.length()==0 && path_file.length()==0){ + user_cmd = txtCmd->get_text(); + } + //========================================= + if (chbAnotherUser->get_active()){ + if (geteuid()!=0){ + //chbTerminal->set_active(true); + } + if (rbPkexec->get_active()){ + if ((chbAnotherUser->get_active()) && (cmbUser->get_active_text().length()==0)) { + + str_variants_root = " pkexec --user ${USER} env PATH=$PATH DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY "; + + } + else if (chbAnotherUser->get_active()){ + str_variants_root = " pkexec --user " + cmbUser->get_active_text() + " env PATH=$PATH DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY "; + + } + else{ + str_variants_root = " pkexec --user ${USER} env PATH=$PATH DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY "; + } + } + else if (rbSu->get_active()){ + if ((chbAnotherUser->get_active()) && (cmbUser->get_active_text().length()==0)) { + str_variants_root="su "; + } + else if (chbAnotherUser->get_active()){ + str_variants_root="su --user " + cmbUser->get_active_text() + " "; + } + else{ + str_variants_root="su"; + } + } + else if (rbSudo->get_active()){ + if ((chbAnotherUser->get_active()) && (cmbUser->get_active_text().length()==0)) { + str_variants_root="sudo "; + } + else if (chbAnotherUser->get_active()){ + str_variants_root="sudo --user " + cmbUser->get_active_text() + " "; + } + else{ + str_variants_root="sudo "; + } + } + } + if (cbxExecuteEpriority->get_active()){ + str_nice_cmd = "nice -n " + to_string(spinPriority->get_value_as_int()) + " "; + } + + if (user_cmd.length()==0 && name_app.length()==0 && path_file.length()==0){ + messageError->show(); + return; + } + + if (chbTerminal->get_active()){ + str_cmd_terminal=" xterm -e "; + } + else{ + str_cmd_terminal=""; + } + string cmd = ""; + if (path_file!=""){ + cmd = str_nice_cmd + " nohup " + str_cmd_terminal + str_variants_root + " xdg-open '" + path_file + "' "; + } + else if (name_app!=""){ + cmd = str_nice_cmd + " nohup " + str_cmd_terminal + str_variants_root + name_app; + } + else{ + user_cmd = this->str_remove(user_cmd, str_cmd_terminal); + user_cmd = this->str_remove(user_cmd, str_variants_root); + user_cmd = this->str_remove(user_cmd, str_nice_cmd); + string str_del = "xterm -e"; + user_cmd = this->str_remove(user_cmd, str_del); + str_del = "nohup"; + user_cmd = this->str_remove(user_cmd, str_del); + str_del = "pkexec --user superadmin env PATH=$PATH DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY"; + user_cmd = this->str_remove(user_cmd, str_del); + str_del = " &"; + user_cmd = this->str_remove(user_cmd, str_del); + for (int index=-20; index<20; index++){ + str_del = to_string(index); + user_cmd = this->str_remove(user_cmd, str_del); + } + str_del = cmbUser->get_active_text(); + user_cmd = this->str_remove(user_cmd, str_del); + + cmd = str_nice_cmd + " nohup " + str_cmd_terminal + str_variants_root + user_cmd ; + } + + txtCmd->set_text(cmd); + cmd += " > /dev/null 2>&1"; + std::thread t(&me_thread, cmd); + t.detach(); + path_file_name = ""; + path_file = ""; + name_app = ""; +} + +void me_thread(string cmd){ + system(cmd.c_str()); +} + +void MainWindow::changed_user(){ + Glib::ustring entry_user = cmbUser->get_active_text(); + if (geteuid()==0 || entry_user == "root"){ + spinPriority->set_range(-20,19); + spinPriority->set_increments(1.0,-1.0); + scalePriority->set_range(-20,19); + scalePriority->set_value(0); + lblTimeEpriorityLow->set_text("19 (Низкий)"); + lblTime4EpriorityHigh->set_text("-20 (Высокий)"); + } + else{ + spinPriority->set_range(0,19); + spinPriority->set_increments(1.0,-1.0); + scalePriority->set_range(0,19); + scalePriority->set_value(0); + lblTimeEpriorityLow->set_text("19 (Низкий)"); + lblTime4EpriorityHigh->set_text("0 (Высокий)"); + } +} + +void MainWindow::activ_or_block_other_user(){ + bool flag = chbAnotherUser->get_active(); + cmbUser->set_active(0); + cmbUser->set_sensitive(flag); + lblInfoUserName->set_sensitive(flag); + if (flag_pkexec==true){ + rbPkexec->set_sensitive(flag); + } + if (flag_su==true){ + rbSu->set_sensitive(flag); + } + if (flag_sudo==true){ + rbSudo->set_sensitive(flag); + } +} + +void MainWindow::change_scale_priority(){ + scalePriority->set_value(spinPriority->get_value_as_int()); +} + +void MainWindow::change_spin_priority(){ + spinPriority->set_value(scalePriority->get_value()); +} + +void MainWindow::pars_dir_bin(){ + namespace fs = std::filesystem; + std::string path = "/bin"; + string file_name = ""; + for (const auto & entry : fs::directory_iterator(path)){ + file_name = entry.path().filename().string(); + if (file_name=="su"){ + flag_su=true; + } + else if (file_name=="sudo"){ + flag_sudo=true; + } + else if (file_name=="pkexec"){ + flag_pkexec=true; + } + } + rbPkexec->set_sensitive(flag_pkexec); + rbSu->set_sensitive(flag_su); + rbSudo->set_sensitive(flag_sudo); +} + +void MainWindow::pars_users(){ + while (true) { + errno = 0; + passwd* entry = getpwent(); + if (!entry) { + if (errno) { + break; + } + break; + } + + if (entry->pw_uid>=1000 && entry->pw_uid!=65534){ + cmbUser->append(entry->pw_name); + } + } + cmbUser->append("root"); + endpwent(); +} + +vector MainWindow::split(const std::string &s, char delim) { + std::stringstream ss(s); + std::string item; + std::vector elems; + while (std::getline(ss, item, delim)) { + elems.push_back(item); + } + return elems; +} + +string MainWindow::str_remove(std::string& source, const std::string& to_remove){ + auto begin = source.find(to_remove); + if (begin!=std::string::npos){ + int len_to_remove = to_remove.length(); + source.erase(begin, begin+len_to_remove); + } + return source; +} + +void MainWindow::pars_apps(){ + if (list_app.size()!=0){return;} + namespace fs = std::filesystem; + struct struct_App App; + string file_name = ""; + string str_Categories; + string path = "/usr/share/applications/"; + for (const auto & entry : fs::directory_iterator(path)){ + file_name = entry.path().filename().string(); + path = "/usr/share/applications/"+file_name; + if (file_name.find(".desktop")!=std::string::npos){ + GKeyFile *gfile=g_key_file_new(); + g_key_file_load_from_file(gfile,path.c_str(),G_KEY_FILE_KEEP_TRANSLATIONS,NULL); + char *Type=g_key_file_get_string(gfile,"Desktop Entry", "Type",NULL); + char *Name=g_key_file_get_locale_string(gfile,"Desktop Entry","Name",setlocale(LC_ALL,NULL),NULL); + char *Exec=g_key_file_get_string(gfile,"Desktop Entry", "Exec",NULL); + char *Categories=g_key_file_get_locale_string(gfile,"Desktop Entry", "Categories",setlocale(LC_ALL,""),NULL); + char *Icon=g_key_file_get_string(gfile,"Desktop Entry", "Icon",NULL); + char *Mime=g_key_file_get_string(gfile,"Desktop Entry", "MimeType",NULL); + if (Type==NULL) continue; + if (Name==NULL) continue; + if (Exec==NULL) continue; + if (Categories==NULL) continue; + if (Icon==NULL) continue; + str_Categories = Categories; + App.Name = Name; + App.Type = Type; + App.Exec = Exec; + App.Icon = Icon; + if (Mime!=NULL){ + App.MimeType = Mime; + } + else{ + App.MimeType = ""; + } + App.Name_desktop = file_name; + App.Categories = split(str_Categories, ';'); + + } + list_app.push_back(App); + } +} + +SettingsPlug::SettingsPlug(::Window p_socketID, Glib::RefPtr builder) + : Gtk::Plug{p_socketID} { + MainWindow* wnd = nullptr; + builder->get_widget_derived("window", wnd); + builder->get_widget("plugBox", plugBox); + plugBox->get_parent()->remove(*plugBox); + add(*plugBox); + show_all_children(); +} + + + + + diff --git a/source/ublexec.h b/source/ublexec.h new file mode 100644 index 0000000..a06c417 --- /dev/null +++ b/source/ublexec.h @@ -0,0 +1,207 @@ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +extern string path_app; +extern string app_name; +extern string path_glade; +extern string path_css; +void me_thread(string cmd); +class CmdArgParser : public Glib::OptionGroup +{ +public: + CmdArgParser(const std::string& p_name, const std::string& p_description, const std::string& p_help); + ::Window GetSocketID() const; + +private: + int m_socketID = 0; + +}; + +class MainWindow : public Gtk::ApplicationWindow { +public: + MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); + MainWindow(Glib::RefPtr const& builder); + void template_apps_obj(Gtk::IconView *icon, Glib::RefPtr >k_list_app); + void get_builder(); + void add_CSS(); + void localization(); + void event(); + void settings(); + void close_entry_app(); + void start_menu_entry_app(); + void message_gui_close(); + void activ_or_block_execute_epriority(); + void open_filemaneg(); + void close_filemaneg(); + void get_path_filemaneg(); + void open_list_app(); + void start_cmd(); + void changed_user(); + void execute_terminal(){} + void execute_another_User(){} + void activ_or_block_other_user(); + void change_scale_priority(); + void change_spin_priority(); + void pars_dir_bin(); + void pars_users(); + void pars_apps(); + void select_Graphics(); + void tmp_desktop(string cmd_name); + void on_item_activated(const Gtk::TreeModel::Path& path); + void tempalte_row(string Name, string Exec, string path , Glib::RefPtr &dtk_list); + void tempate_icon_select(Gtk::IconView *icon, Glib::RefPtr >k_list); + void ok_close_entry_app(); + void select_Tools(); + void select_Internet(); + void select_Multimedia(); + void select_Settings(); + void select_Education(); + void select_Office(); + void select_Other(); + void select_Development(); + void select_System(); + void icon_clear(); + void set_icon_array(); + //static void me_thread(string cmd); + void unselect_icon(Gtk::IconView *icon_entry); + string str_remove(std::string& source, const std::string& to_remove); + vector split(const std::string &s, char delim); + public: + class ModelColumns : public Gtk::TreeModel::ColumnRecord + { + public: + ModelColumns() + { + add(m_col_filename); + add(m_col_description); + add(m_col_pixbuf); + add(app_name_exec); + + } + Gtk::TreeModelColumn m_col_filename; + Gtk::TreeModelColumn m_col_description; + Gtk::TreeModelColumn app_name_exec; + Gtk::TreeModelColumn > m_col_pixbuf; + }; + ModelColumns m_Columns; + public: + Glib::RefPtr builder; + Gtk::Button *btnFilemaneg; + Gtk::Button *btnListApp; + Gtk::Button *btnStart; + Gtk::CheckButton *chbTerminal; + Gtk::CheckButton *chbAnotherUser; + Gtk::CheckButton *cbxExecuteEpriority; + Gtk::ComboBoxText *cmbUser; + Gtk::SpinButton *spinPriority; + Gtk::Scale *scalePriority; + Gtk::RadioButton *rbPkexec; + Gtk::RadioButton *rbSu; + Gtk::RadioButton *rbSudo; + Gtk::Entry *txtCmd; + Gtk::FileChooserDialog *wndChooseFileWallpaper; + Gtk::Button *btnFilemangerExit; + Gtk::Button *btnFilemangerOk; + Gtk::Label *lblTimeEpriority; + Gtk::Label *lblTimeEpriorityLow; + Gtk::Label *lblTime4EpriorityHigh; + Gtk::Label *lblUserName; + Gtk::MessageDialog *messageError; + Gtk::Button *btnMessageErrorOk; + Gtk::Label *lblMessageError; + Gtk::Button *btnStartMenuOK; + Gtk::Button *btnStartMenuExit; + Gtk::Window *dialogStartMenu; + Gtk::Box *boxColor; + Gtk::Label *lblInfoHead; + Gtk::Label *lblinfoCmd; + Gtk::Label *lblInfoTime; + Gtk::Label *labInfoExecutTerm; + Gtk::Label *lblInfoUser; + Gtk::Label *lblInfoUserOther; + Gtk::Label *lblInfoUserName; + Gtk::Label *lblInfoNooPriority; + Gtk::Label *lblInfoExec; + Gtk::Label *lblInfoPriority; + Gtk::Label *lblInfoEnterProg; + + Gtk::Label *lblGraphics; + Gtk::Label *lblTools; + Gtk::Label *lblInternet; + Gtk::Label *lblMultimedia; + Gtk::Label *lblSettings; + Gtk::Label *lblEducation; + Gtk::Label *lblOffice; + Gtk::Label *lblOther; + Gtk::Label *lblDevelopment; + Gtk::Label *lblSystem; + + Gtk::IconView *iconGraphics; + Gtk::IconView *iconTools; + Gtk::IconView *iconInternet; + Gtk::IconView *iconMultimedia; + Gtk::IconView *iconSettings; + Gtk::IconView *iconEducation; + Gtk::IconView *iconOffice; + Gtk::IconView *iconOther; + Gtk::IconView *iconDevelopment; + Gtk::IconView *iconSystem; + Gtk::IconView *iconEntry; + + Glib::RefPtr list_Graphics; + Glib::RefPtr list_Tools; + Glib::RefPtr list_Internet; + Glib::RefPtr list_Multimedia; + Glib::RefPtr list_Settings; + Glib::RefPtr list_Education; + Glib::RefPtr list_Office; + Glib::RefPtr list_Other; + Glib::RefPtr list_Development; + Glib::RefPtr list_System; + public: + string execute_cmd = ""; + string path_file = ""; + string name_app = ""; + bool flag_pkexec = false; + bool flag_su = false; + bool flag_sudo = false; + string path_file_name; + struct struct_App{ + string Name_desktop; + string Name; + string Exec; + string Icon; + string MimeType; + string Type; + vector Categories;}; + list list_app; + set set_categories; + int index_exec_gui_apps = 0; + Gtk::IconView* array_icon[10]; + + +}; + +class SettingsPlug : public Gtk::Plug{ +public: + Gtk::Window *window; + SettingsPlug(::Window p_socketID, Glib::RefPtr builder); + +private: + Gtk::Widget *plugBox; + Gtk::Widget *parent; +}; + + diff --git a/style.css b/style.css new file mode 100644 index 0000000..41a96a0 --- /dev/null +++ b/style.css @@ -0,0 +1,7 @@ +.cssboxColor1{ + background: url("/usr/share/ublexec/images/bg_top.png") no-repeat; +} +.textHead{ + text-shadow: 1px 1px #ffffff; +} + diff --git a/ublexec.desktop b/ublexec.desktop new file mode 100644 index 0000000..ef0cc9d --- /dev/null +++ b/ublexec.desktop @@ -0,0 +1,14 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=ublexec +Name[ru]=Выполнить +GenericName=Execution from user rights +GenericName[ru]=Выполнить +Comment=Execution from user rights +Comment[ru]=Выполнить +Type=Application +Exec=ublexec +Icon=ublexec +Terminal=false +X-XfcePluggable=true +Categories=XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-SystemSettings;X-UBL-SettingsManager;X-UBL-SystemSettings; \ No newline at end of file diff --git a/ublexec.glade b/ublexec.glade new file mode 100644 index 0000000..6ecef10 --- /dev/null +++ b/ublexec.glade @@ -0,0 +1,1351 @@ + + + + + + -20 + 19 + 1 + 10 + + + 500 + 400 + False + + + True + False + vertical + + + True + False + Selecting Programs + + + False + True + 0 + + + + + True + True + in + + + False + 5 + 5 + 5 + 5 + 5 + natural + + + True + False + 1 + 1 + 5 + 0 + etched-out + + + True + False + 12 + + + True + False + vertical + + + True + False + start + Graphics + + + False + True + 0 + + + + + True + True + 1 + queue + 1 + 1 + 1 + + + + True + True + 1 + + + + + True + False + start + Tools + + + False + True + 2 + + + + + True + True + 1 + queue + 1 + 1 + 1 + + + + True + True + 3 + + + + + True + False + start + Internet + + + False + True + 4 + + + + + True + True + 1 + queue + 1 + 1 + 1 + + + + True + True + 5 + + + + + True + False + start + Multimedia + + + False + True + 6 + + + + + True + True + 1 + queue + 1 + 1 + 1 + + + + True + True + 7 + + + + + True + False + start + Settings + + + False + True + 8 + + + + + True + True + 1 + queue + 1 + 1 + 1 + + + + True + True + 9 + + + + + True + False + start + Education + + + False + True + 10 + + + + + True + True + 1 + queue + 1 + 1 + 1 + + + + True + True + 11 + + + + + True + False + start + Office + + + False + True + 12 + + + + + True + True + 1 + queue + 1 + 1 + 1 + + + + True + True + 13 + + + + + True + False + start + Other + + + False + True + 14 + + + + + True + True + 1 + queue + 1 + 1 + 1 + + + + True + True + 15 + + + + + True + False + start + Development + + + False + True + 16 + + + + + True + True + 1 + queue + 1 + 1 + 1 + + + + True + True + 17 + + + + + True + False + start + System + + + False + True + 18 + + + + + True + True + 1 + queue + 1 + 1 + 1 + + + + True + True + 19 + + + + + + + + + + True + False + + + + + + + + + + + + True + True + 1 + + + + + True + False + end + start + + + ОК + -1 + -1 + True + True + True + + + True + True + 0 + + + + + Выход + True + True + True + + + True + True + 1 + + + + + False + True + 2 + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + gtk-media-play + + + False + Внимание! + dialog + + + False + vertical + 2 + + + False + True + end + + + + + + ОК + True + True + True + + + True + True + 1 + + + + + False + False + 0 + + + + + True + False + 10 + 10 + 15 + Select an executable file or program + + + True + True + 2 + + + + + + + False + UBConfig - ubexec + + + True + False + vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 69 + ublexec + + + False + True + 0 + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Running applications as a user with a +specified priority + + + + + + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + vertical + + + True + False + vertical + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 0.019999999552965164 + in + + + True + False + 5 + 5 + vertical + + + True + False + + + 145 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Team + True + 0 + + + False + True + 0 + + + + + 330 + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + True + True + True + end + 5 + 5 + 5 + 5 + 6 + 6 + + + True + False + center + center + 5 + 5 + 5 + 5 + 6 + 6 + gtk-directory + + + + + False + True + 2 + + + + + True + True + True + end + 5 + 5 + 5 + 5 + 6 + 6 + + + True + False + center + center + 5 + 5 + 5 + 5 + 6 + 6 + edit-select-all + + + + + False + True + 3 + + + + + False + True + 0 + + + + + True + False + 6 + 6 + + + 131 + True + False + 15 + 5 + 15 + 5 + + + False + True + 0 + + + + + True + True + False + start + center + 5 + 5 + 5 + 5 + 6 + True + + + True + False + Run in the terminal emulator + + + + + False + True + 1 + + + + + False + True + 1 + + + + + + + True + False + Command Line + + + + + False + True + 0 + + + + + False + True + 1 + + + + + True + False + 5 + vertical + + + True + False + 5 + 5 + 5 + 5 + 0.019999999552965164 + in + + + True + False + 5 + 5 + vertical + + + True + False + + + True + True + False + start + center + 5 + 5 + 5 + 5 + 6 + 6 + True + + + True + False + Run as another user + + + + + False + True + 0 + + + + + pkexec + True + True + False + True + rbSu + + + False + True + 1 + + + + + su + True + True + False + True + rbPkexec + + + False + True + 2 + + + + + sudo + True + True + False + True + rbSu + + + False + True + 3 + + + + + 95 + True + False + end + 15 + 5 + 15 + 5 + + + False + True + 4 + + + + + False + True + 0 + + + + + True + False + + + 145 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + User Name + True + 0 + + + False + True + 0 + + + + + 330 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 1 + + + + + False + True + 1 + + + + + + + True + False + User + + + + + False + True + 0 + + + + + False + True + 2 + + + + + True + False + 5 + vertical + + + True + False + 5 + 5 + 5 + 5 + 0.019999999552965164 + in + + + True + False + 5 + 5 + vertical + + + True + True + False + start + center + 5 + 5 + 5 + 5 + 6 + 6 + True + + + True + False + Change startup priority + + + + + False + True + 0 + + + + + True + False + + + 5 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Priority + True + 0 + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + adjustment1 + 20 + 0 + 0 + + + True + True + 1 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 2 + + + + + False + True + 1 + + + + + True + False + + + 65 + True + False + 15 + 5 + 15 + 5 + 0 + + + False + True + 0 + + + + + 145 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 19 (Low) + True + 0 + + + False + True + 1 + + + + + True + False + end + center + 5 + 5 + 5 + 5 + 6 + 6 + -20 (High) + True + 0 + + + True + True + 3 + + + + + 95 + True + False + end + 15 + 5 + 15 + 5 + + + False + True + 4 + + + + + False + True + 2 + + + + + + + True + False + Priority + + + + + False + True + 0 + + + + + False + True + 3 + + + + + Run + True + True + True + 5 + 5 + 5 + 5 + 6 + 6 + image1 + True + + + False + True + 4 + + + + + True + True + 0 + + + + + False + True + 2 + + + + + + + False + Пожалуйста выберите Файл + True + center + 500 + 400 + True + dialog + True + True + + + False + vertical + 2 + + + False + end + + + gtk-cancel + True + True + True + True + + + True + True + 0 + + + + + gtk-ok + True + True + True + True + + + True + True + 1 + + + + + False + False + 0 + + + + + + + + + diff --git a/ublexec.svg b/ublexec.svg new file mode 100644 index 0000000..0ec751a --- /dev/null +++ b/ublexec.svg @@ -0,0 +1,5680 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ublexec_ru.po b/ublexec_ru.po new file mode 100644 index 0000000..926e51a --- /dev/null +++ b/ublexec_ru.po @@ -0,0 +1,103 @@ +# English translations for PACKAGE package. +# Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Automatically generated, 2023. +# +msgid "" +msgstr "" + +msgid "System" +msgstr "Система" + +msgid "Development" +msgstr "Разработка" + +msgid "Other" +msgstr "Прочие" + +msgid "Office" +msgstr "Офис" + +msgid "Education" +msgstr "Образование" + +msgid "Settings" +msgstr "Настройки" + +msgid "Multimedia" +msgstr "Мультимедиа" + +msgid "Internet" +msgstr "Интернет" + +msgid "Tools" +msgstr "Инструменты" + +msgid "Graphics" +msgstr "Графика" + +msgid "ОК" +msgstr "ОК" + +msgid "Exit" +msgstr "Выход" + +msgid "Selecting Programs" +msgstr "Выбор программ" + +msgid "Running applications as a user with a\nspecified priority" +msgstr "Запуск приложений от имени пользователя с\nуказанным приоритетом" + +msgid "Team" +msgstr "Команда" + +msgid "Run in the terminal emulator" +msgstr "Выполнить в эмуляторе терминала" + +msgid "Command Line" +msgstr "Командная строка" + +msgid "Run as another user" +msgstr "Выполнить от имени другого пользователя" + +msgid "pkexec" +msgstr "pkexec" + +msgid "su" +msgstr "su" + +msgid "sudo" +msgstr "sudo" + +msgid "User Name" +msgstr "Имя поьзователя" + +msgid "User" +msgstr "Пользователь" + +msgid "Change startup priority" +msgstr "Изменить приоритет запуска" + +msgid "Priority" +msgstr "Приоритет" + +msgid "19 (Low)" +msgstr "19 (Низкий)" + +msgid "-20 (High)" +msgstr "-20 (Высокий)" + +msgid "Run" +msgstr "Запустить" + +msgid "Select an executable file or program" +msgstr "Выберите исполняемый файл или программу" + +msgid "Please select File" +msgstr "Пожалуйста выберите Файл" + +msgid "Warning!" +msgstr "Внимание!" + +msgid "ublexec" +msgstr "Выполнить"