LINUX.ORG.RU

14
Всего сообщений: 394

Запуск GUI-программы через Ansible на 15-ти хостах

Мне нужно запустить через Ansible программу сразу на ~15 хостах. Программа GUI-шная, но запустить ее надо в терминале, чтобы в случае вылета программы, терминал остался, можно было быстро посмотреть выхлоп.

  - name: Запуск программы
    shell: "export DISPLAY=:0.0 ; fly-term --noclose --workdir /usr/share/ourProject -e \"./programm\""

Проблема в том, что Ansible ждет завершения всей команды модуля shell. И работает Ansible в 5 потоков, то есть, запускает прогу только на 5 хостах и ждет.

Я пробовал отвязываться от терминала так:
    shell: "export DISPLAY=:0.0 ; (fly-term --noclose --workdir /usr/share/ourProject -e \"./programm\" &)"

Но тогда программа запускается и сразу завершается. Блоками по 5 хостов: сначала на первых 5 хостах, через секунду на следующих 5 и так далее.

Я курил маны на модули shell, raw, command, но ничего работающего как нада сделать не смог.

Что нужно прописать в команду, чтобы программа просто была запущена на хостах, а Ansible поехала работать дальше без ожидания?

 , , , ,

Xintrea ()

Vim, проблема с фоновым цветом.

Здравствуйте, товарищи!

Установил тут себе цветовую тему в vim (morhetz / gruvbox) и вот такая у меня проблема:

  • При скролле вниз по одной строке или колесом мыши вылезающие снизу строки дополняются чёрными полосами. При скролле вверх или при использовании pgUP pgDown такой проблемы нет. Написал в issue на гитхаб, но что-то подсказывает мне что дело то не в самой цветовой теме, а в моём окружении.

Может кто-то поможет приблизиться к решению данной проблемы, ибо очень раздражает.

https://user-images.githubusercontent.com/59111738/73941204-de328500-48fd-11ea-9962-6804b0c29d14.png

 , ,

Demige ()

Неудобная работа с контентом в андроиде

Заметил за собой в последнее время, что почти не использую телефон.
Гуй андроида и его поведение с пользователем почему начисто отбивает желание пользоваться телефоном.

Давно я купил флешку на 64 гб, хотел набить её аниме, фильмами, музыкой.
А теперь какое то отвращение к смартфону. само железо нормальное, тормозов нет. На ПК все то же самое нормально делается, дело не в какой то жизненной усталости. Я бы выразился скорее, это смартфонная усталость. Флешка лежит пустая, там 4 мр3шки под рингтоны и update.zip бекапа.

Попробую угадать причины своего такого отвращения.

первая это то, что андроид недружелюбен для пользователей. Он скрывает часть файлов, каждое приложение либо отображает часть файлов, либо там нет каких то вообще путей в ФС, например просмотрщик отображает только папки с файлами, нельзя потыкать поискать нормально, я теряюсь в этом кале.
Автозагрузка приложений вообще отдельная песня, там столько непонятных ивентов автостарта...
андроид дружелюбен только для дебилов, которые используют 1.5 приложения и звонки, всё остальное там сделано сильно наотвяжись.

Второе, я так думаю, это никая интеграция с ПК. линксом/виндой, етц. чтобы настроить обмен контактами, файлами, камерой нужно ставить кучу ЛЕВЫХ приложений таких как эйрдроид, nextcloud/итд

ну может быть третье - это внутренне ненастраиваемая система (речь не о ланчерах), которая считает себя умнее юзера.
отключить системно автостарт? да вы шутите! только левыми приблудами. Попробовать настроили гуглосервисы реже лезть в сеть? это где настраивается? хотя бы /etc/default/alphabet ?😁 нет, эта та грань, та граница, где ты глупее ОС и ничего нельзя сделать, можно только очень частично задавить поведение ЛЕВЫМИ утилитами.

 , ,

darkenshvein ()

Управление растровым графическим редактором из командной строки

Мысль повторно возникла в связи с недавним спором Gimp vs ImageMagic.

Лет 17 назад в каких-то графических редакторах (возможно, QCAD и AutoCAD) я увидел неожиданный элемент интерфейса. Командную строку. Всё, что можно было сделать, тыкая мышью, можно было сделать, набрав команду в этой строке. А действия мышью отображались как команды в этой строке. Естественно, история команд хранилась. Не выяснял, можно ли было влезть в середину списка команд, поменять одну и повторить все остальные. И могла ли история становиться древовидной.

Вопрос: пытался ли кто-либо сделать такое с растровой графикой? Про лисп и питон в Гимпе знаю, но там из консоли недоступна общая история. Преимущества такого подхода — удобный интерфейс, чтобы откатываться по истории или хотя бы повторно прогонять её сначала. Очевидный недостаток — громоздкость. Кто-нибудь пробовал?

 , , , ,

question4 ()

Universal UI for Rust

Доброго времени суток.

Примерно полгода назад, когда я начинал изучать Rust, я обнаружил в нем фатальный недостаток - отсутсвие крейта, который бы реализовывал удобный и кроссплатформенный UI. Хотелось поддержки Linux/Windows/MacOS/WASM-web/Android/iOS и удобства использования уровня Qt с их сигналами-слотами.

В ходе парочки бессоных ночей (на самом деле намного больше) появилась некоторое количество крейтов, которые позволяет писать UI вот так:

#[derive(UWidget)]
struct MyWidget {
    #[uwidget]
    layout: LinearLayout,

    #[public_slot] // у структуры будет публичный метод, через который слот будет доступен снаружи
    #[uprocess(on_text_updated)]
    slot_set_text: SlotImpl<String>,

    slotproxy_set_text: SlotProxy<String>,

    #[uprocess(on_button_clicked)]
    slot_button_clicked: SlotImpl<()>,
}

impl MyWidget {
    pub fn new(placeholder: String) -> MyWidget {
        let slotproxy_set_text;
        let slot_button_clicked = SlotImpl::new();

        let mut layout = LinearLayout::new(Orientation::Horizontal);
        layout.push_widget({
           let textedit = TextEdit::new(placeholder);
           slotproxy_set_text = textedit.slot_set_text().proxy();
           textedit
        });

        layout.push_widget({
            let mut button  = Button::new("Push me");
            button.signal_clicked().connect(&slot_button_clicked);
            button
        });

        return MyWidget{
            layout,
            slot_set_text: SlotImpl::new(),
            slotproxy_set_text,
            slot_button_clicked,
        };
    }

    fn on_text_updated(&self, s: String) {
        self.slotproxy_set_text.exec_for(s);
    }

    fn on_button_clicked(&self, _:()) {
        info!("button clicked!");
    }
}



В ближайшем будущем планирую еще немного посидеть над макросами, чтобы можно было писать вот так:

pub fn new(placeholder: String) -> MyWidget {
    let layout = layout!(
        orientation: Horizontal,
        widget: text_edit!(
        	placeholder: placeholder,
        	slot_set_text: proxy!(slotproxy_set_text),
        ),
        widget: button!(
        	signal_clicked: connect!(slot_button_clicked),
        ),
    );

    return MyWidget{
        layout,
        slot_set_text: SlotImpl::new(),
        slotproxy_set_text,
        slot_button_clicked,
    };
}


Немного технических подробностей:
* Уже работает для Linux (Qt) и WASM (web-sys).
** В ближайших планах минимальная поддержка Windows/MacOS через Qt и поддержка Android (Java-jni, нативные виджеты).
** В среднесрочных планах поддержка нативных виджетов Win/Mac, поддержка iOS.
* Система сборки на build.rs-скриптах для cargo, которая позволяет из одних и тех же исходников собирать проект для любой платформы. Небольшой (2-5 строк) скрипт придется написать самому, используя готовые функции из библиотеки.
* В самой библиотеке есть еще Property, которые умеют хранить состояние и обладают встроенными сигналами/слотами. И немного других улучшалок.
* Никаких unsafe в интерфейсах для пользователя (внутри - только для работы с native-кодом).
* Никаких RefCell, Rc и прочих Arc в интерфейсах. Внутри их тоже практически нет, к релизу хочу выпилить совсем.


В основном вдохновлялся Qt, но изначально все писалось под web-sys, с последующим прикручиванием Desktop'а.


Тут хотелось бы обсудить 2 вещи (на самом деле 3):
1. Интересна ли вам такая библиотека.
2. Насколько удобным выглядит интерфейс.
3. Насколько Rust ущербен, порекомендуйте уже готовые библиотеки, и вот это вот все.

P.S. Буду держать вас в курсе, так что можете сразу ставить uniui тег в игнор.

 , , ,

trex6 ()

Java desktop GUI framework?

Меня очень раздражает Swing, но альтернатив ему не вижу. Может быть, что-то упускаю?

Смотрю в сторону JavaFX, но совсем не ясно что с ним будет через пару лет.

P.S. Будет приложение выглядеть нативно под каждой платформой или нет - без разницы.

 , ,

SaBo ()

Как найти русское сообщество разработки десктопного окружения для Linux ?

Посетила идея найти или собрать что-то на подобие своего DE для Ubuntu. Про ГНОМ пишут что там трудно что-либо поменять, и писать приложения придется на Си. В КДЕ есть единый набор библиотек/фреймворк и кажется там будет проще разобраться. Имею опыт разработки программ/интерфейсов, имею интерес, но писать велосипеды нет смысла. Тем более один не осилю точно.

Например версия Ubuntu для разработчиков(веб разработчиков). ХромОС ещё не успел попользоваться, но кажется она выглядит именно так. Запилить Гуглопоиск по центру рабочего стола и как поисковик по умолчанию, Chrome как дефолтный браузер. Можно ведь и от Гугла за это какую-то копейку поиметь.

Почему этого никто ешё не делает?

 , , , ,

tobiVan ()

Из чего состоит GUI Ubuntu (18.04)

Сейчас покопался немного. До 17 была Unity оболочка для GNOME. Теперь там чисто гном, оболочку убрали. Но гном, это ведь «собирательный образ» получается для всех приложений созданных под него. DE сам по себе из чего там состоит? Ведь можно устанавливать приложения гном в КДЕ и наоборот. Или удалить все приложения гнома или заменить их на альтернативные.

Посмотрел несколько видео о том как собирают ГУИ на OpenBox. Запутался, там есть ещё и Gnome-Openbox и KDE…

Можно Compiz заменить на Openbox? И что из этого выйдет? Там же ещё Даш и «главное меню» - их тоже можено менять без последствий?

 , , , ,

tobiVan ()

Не запускается графическая оболочка убунту

После того, как перезагрузил компьютер, убунту запустилась в консольном режиме. Пробовал переустановить драйвер видеокарты nvidia на обычный, но не помогло. Возможно, что-то упустил. В чем еще может быть проблема? И как ее решить?

 , ,

nsun ()

Тотально сломанная горизонтальная прокрутка.

Кто-нибудь может мне объяснить, почему тотально во всех программах сломано горизонтальное выделение текста? Почему в любом редакторе, браузере, операционной системе и т.д. при попытке выделить текст расположенный правее зоны отображения выделяется вся строка?

Притом с лоркодом этой проблемы нет.

 

steemandlinux ()

Утилита для управления массой однотипных процессов.

Возникла такая задача - запуск множества процессов ffmpeg с разными конфигами (транскодирование каналов), управление этими процессами, их мониторинг, чтение логов, ограничение ресурсов и тому подобное. Этакий недофлюссоник. Сейчас что-то подобное реализовано на monit, но там конфиги приходится пихать в шелл-скрипты, городить всякие обвязки и вообще всё как-то криво и неудобно. Хочется что-то вроде докера с веб-интерфейсом управления, но не докер. Возможно, что-то интегрированное с systemd/cgroup.

Никому подобных утилит не встречалось?

Наткнулся на https://github.com/remux-io/remuxme но код, обмазанный регулярками, не впечатлил.

 , ,

lizard ()

Почему python не для настольных приложений?

Есть же pyqt, tk и др фреймворки

 , ,

KRex ()

Python 3 + GUI

На чем лучше забахать? Вариантов много, начиная от культей, заканчивая веб-мордой. Бахать буду что-то простенькое, почти текстовой редактор, только немного необычный, т.к. заточен под специфичную задачу и в теории немного обмазан хитрыми алгоритмами. Но GUI по сложности такой же. Однако, хочется чтобы и свистело и пердело.

 ,

peregrine ()

Как осуществить запуск и управление графическим десктопным приложением на Linux сервере без видеокарты?

Собственно сабж.
Знаю, есть xvfb, но оно вроде только запускает, чем управлять можно?
Желательно чтобы было на Python, но от безысходности пойдет на чем угодно.

 , ,

Qwentor ()

GUI-программы на Go

Кто в теме, расскажите про текущее состояние дел - что есть для создания GUI-приложений на Go в Линуксах, можно ли примотать Go к Qt наподобие PyQt, если да то насколько нужно будет лезть в С++

 , ,

Deleted ()

Как пользоваться yad (zenity)?

Попытался запилить маленькую менюшку, выбрал yad, так как zenity даже кнопки расставить не позволяет, только не могу понять как получить вывод с кнопки.

То есть если менюшка запускается кнопкой из другой менюшки, в терминал выхлопа нэма:

do_gui () {
	"$YAD" \
		--title="Nehirim+" \
		--geometry=300x200 \
		--image="$IMAGE" --image-on-top \
		--form \
		--columns=1 \
		--field="кнопко:fbtn" '@bash -c do_knopko %1'
}

Как получить вывод вот из таких «do_knopko»?

 , ,

Kapshibergen ()

Google Pixelbook, запуск GTK приложений нативно

ВНИМАНИЕ! ПРОШУ, ВОЗДЕРЖИТЕСЬ ОТ ОТВЕТОВ В ДУХЕ «Я ТУТ ДВЕ МИНУТЫ ПОГУГЛИЛ И ВОТ» - Я СДЕЛАЛ ЭТО ДО ВАС НЕ ОДИН РАЗ И ПРОДОЛЖАЮ ДЕЛАТЬ. НУЖНЫ ЛЮДИ С ОПЫТОМ ТАК КАК МНЕ САМОМУ НЕ ХВАТАЕТ КВАЛИФИКАЦИИ С ЭТИМ СПРАВИТСЯ, СПАСИБО, ПОЖАЛУЙСТА.

Вообщем, есть один Google Pixelbook и желание получить нативно под ведром разные GIMP и иже. Соврешенно случайно наткнулся в списке `crew` на GTK3, после чего всякий VSCode уже начал падать не с кучей ошибок об отсутствии разделяемых библиотек, а выдавать вот такое:

https://i.redd.it/f057v3vromg31.png

Сегодя еще доставил GIMP оттуда же, ситуация аналогичная.

Удалось ли кому-то завести этот софт без контейнеризации?

 , , ,

trashymichael ()

Кастомный делегат и завершение редактирования

Привет, всем! Столкнулся с проблемой, которую мне пока не получается решить. Прошу помочь. У меня есть виджет для редактирования пути к файлу. Его я использую в делегате table view (скриншот). Проблема с ним в том, что если я передаю фокус в lineedit, то делегат не хочет самостоятельно закрываться переходя на другую вкладку, либо по нажатию run. Это приводит к тому, что данные не передаются в модель и в диалог, который этими данными интересуется. Поискал на форумах, как люди решают эту проблему. В основном рекомендуют применять setFocusProxy и eventFilter. Но я не смог разобраться, как их применить к моему случаю. Есть ещё такое ограничение: в редакторе присутствуют кнопки выбора файла и редактирования файла. Желательно по их нажатию не закрывать делегат. Проект с проблемой на github Целевая платформа windows

 , ,

heaven__12 ()

На каком яп можно так же легко и просто манипулировать пикселями?

В процессе поисков яп для некоторых задач узнал про https://processing.org/, вопрос в заголовке. Нужно примерно такое https://i.imgur.com/Yy6BNwC.png то есть короткий, легкий для понимания код. В принципе processing устраивает, но вдруг есть какой-то искомый яп, с заданными хотелками, без vm java, достаточно производительный и такой же простой? Можно и не очень простой, если выбора совсем нет.Желательно без адовых портянок инициализации графики. Пример на скриншоте запущен на intel q6600. Сори за виндовс. Если накидаете аналог моего примера на предложенном вами яп, то вообще будет здорово!

void setup() {
  size(640, 480);
  //frameRate(60);
  background(0); 
}

void draw() {
  int stMillis = millis();
  
  for (int x = 0; x < width; x++) {
    for (int y = 0; y < height; y++) {
      if((int)random(2)==1) set(x, y, color(255,255,255));
      else set(x, y, color(0,0,0));
    }
  }
  
  float fps = 1000.0/float((millis() - stMillis));
  fill(0, 0, 0);
  rect(2, 2, 140, 35);
  fill(255, 50, 50);
  textSize(32);
  text(fps, 5, 30);
}

Кому интересно, вот что транслируется из примера выше в *.java:

import processing.core.*; 
import processing.data.*; 
import processing.event.*; 
import processing.opengl.*; 

import java.util.HashMap; 
import java.util.ArrayList; 
import java.io.File; 
import java.io.BufferedReader; 
import java.io.PrintWriter; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.IOException; 

public class noise extends PApplet {

public void setup() {
  
  //frameRate(60);
  background(0); 
}

public void draw() {
  int stMillis = millis();
  
  for (int x = 0; x < width; x++) {
    for (int y = 0; y < height; y++) {
      if((int)random(2)==1) set(x, y, color(255,255,255));
      else set(x, y, color(0,0,0));
    }
  }
  
  float fps = 1000.0f/PApplet.parseFloat((millis() - stMillis));
  fill(0, 0, 0);
  rect(2, 2, 140, 35);
  fill(255, 50, 50);
  textSize(32);
  text(fps, 5, 30);
}
  public void settings() {  size(640, 480); }
  static public void main(String[] passedArgs) {
    String[] appletArgs = new String[] { "noise" };
    if (passedArgs != null) {
      PApplet.main(concat(appletArgs, passedArgs));
    } else {
      PApplet.main(appletArgs);
    }
  }
}

Это же трындец сколько импортов всяких писать! Ну и если бы писал на чисто java без import processing думаю было бы все не так просто.

 , ,

Lorovec ()

mcclim pane options и непонятный element

(in-package :common-lisp-user)

(defpackage "APP"
  (:use :clim :clim-lisp)
  (:export "APP-MAIN"))

(in-package :app)

(define-application-frame superapp ()
  ((numbers :initform (loop repeat 20 collect (list (random 100000000)))
	    :accessor numbers)
   (cursor :initform 0 :accessor cursor))
  (:pointer-documentation t)
  (:panes
   (app :application
	:height 400 :width 600
	:incremental-redisplay t
	:display-function 'display-app)
   (int :interactor :height 200 :width 600))
  (:layouts
   (default (vertically () app int))))

(defun display-app (frame pane)
  (loop for element in (numbers frame)
     for line from 0
     do (princ (if (= (cursor frame) line) "*" " ") pane)
       
     ;; pane is the protocol class that corresponds to a pane,
     ;; взят как аргумент функции
       
     do (updating-output (pane :unique-id element         ;; не нашёл откуда
			       :id-test #'eq              ;; взялись эти
			       :cache-value (car element) ;; опции
			       :cache-test #'eql)         ;; 
			 (format pane "~a~%" (car element)))))
;; По опциям, нашёл

;; updating-output  (stream 
;; &rest args 
;; &key unique-id     <-      здесь element как var

;; unique-id provides a means to uniquely identify the output done by body. If unique-id is not supplied, CLIM will generate one that is guaranteed to be unique. unique-id may be any object as long as it is unique with respect to the id-test predicate among all such unique ids in the current incremental redisplay. id-test is a function of two arguments that is used for comparing unique ids it has indefinite extent. 

;; (id-test #'eql) 
;; cache-value        <-      здесь element как list

;; cache-value is a value that remains constant if and only if the output produced by body does not need to be recomputed.  If the cache value is not supplied, CLIM will not use a cache for this piece of output. cache-test is a function of two arguments that is used for comparing cache values; it has indefinite extent.

;; (cache-test #'eql)          почему element то 
;;                             var то list?
;; fixed-position             element нигде не определён
;; all-new 
;; parent-cache 
;; record-type) &body body

(defun app-main ()
  (run-frame-top-level (make-application-frame 'superapp)))

(define-superapp-command (com-quit :name t) ()
  (frame-exit *application-frame*))

(define-superapp-command (com-add :name t) ((number 'integer))
  (incf (car (elt (numbers *application-frame*)
		  (cursor *application-frame*)))
	number))

(define-superapp-command (com-next :name t) ()
  (incf (cursor *application-frame*))
  (when (= (cursor *application-frame*)
	   (length (numbers *application-frame*)))
    (setf (cursor *application-frame*) 0)))

(define-superapp-command (com-prev :name t) ()
  (decf (cursor *application-frame*))
  (when (minusp (cursor *application-frame*))
    (setf (cursor *application-frame*)
	  (1- (length (numbers *application-frame*))))))

 ,

saufesma ()