ubuntuusers.de

Programm-Fenstergröße per Script festlegen

Status: Ungelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

taildragger

Avatar von taildragger

Anmeldungsdatum:
11. Mai 2016

Beiträge: 101

Wohnort: Löwenberger Land

Guten Tag,

Ich hoffe Ihr könnt mir helfen, ich finde einfach nichts im Netz, vielleicht auch weil ich falsch suche.

Ich möchte unter Ubuntu 20.04 LTS das Kleine Programm "Counter" (ist aber eigentlich egal welches Programm) in einer bestimmten Fenstergröße starten. Aktuell startet es immer maximiert. Ich verkleinere es dann jedes Mal und da kostet sehr viel Zeit.

Gibt es eine Möglichkeit ein kleines Startscript zu schreiben, welches das Programm gleich in die richtige Größe zwingt? Oder hat Ubuntu sogar eine Funktion dafür, welche ich noch nicht entdeckt habe?

Vielen Dank vorab. Steffen

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Unter 18.04 finde ich das Programm nicht. Hast Du einen Link dazu?

Je nach dem mit welcher Bibliothek/Sprache das geschrieben ist, kann man es mit Startparametern aufrufen, die die Größe festlegen. Ein erster Test dafür wäre:

1
Counter --help

Das xfce4-terminal kann man mit einer gewissen Geometrie aufrufen xfce4-terminal --geometry=80x25, was aber nicht Pixel sondern Zeichenzahl misst.

Grundsätzlich kann ein Programm seine Größe selbst bestimmen und viele Programme tun dies unmittelbar nach dem Start und erwarten keine Zuweisung durch Parameter oder Konfigurationsdatei.

Mit xwininfo kann man die Größe eines Fensters feststellen, etwa für xcalc:

1
xcalc & sleep 0.4 && xwininfo -name Calculator -size

Eine Möglichkeit, die zu ändern sehe ich da nicht, aber das Problem, dass es mehrere Fenster mit gleichem Namen geben kann. Man kann eine Id benutzen, um ein spezifisches Fenster anzusprechen, aber wie man die Id automatisch ermittelt ist mir noch unklar.

Mit einem Macro könnte man die Mausaktionen aufnehmen und später abspielen, die eine Größenänderung bewirkt.

Wenn es ein Open-Source-Programm ist, könnte es am leichtesten sein, sich den Quellcode zu besorgen, und das Programm neu zu kompilieren, nachdem man es im Quellcode geändert hat.

Vielleicht hat ein Programm auch in ~/.config ein Unterverzeichnis mit seinen Settings und kann da manipuliert werden. I.d.R. dürften das aber Programme sein, die ihre Settings beim Beenden speichern und beim Neustart wieder einlesen, so dass es leichter ist, das Programm mit diesen Settings zu beenden, als erst den rc-File zu suchen.

taildragger

(Themenstarter)
Avatar von taildragger

Anmeldungsdatum:
11. Mai 2016

Beiträge: 101

Wohnort: Löwenberger Land

Counter ist ein snap-paket, befindet sich in den "normalen" Quellen, hatte ich bei 18.04 auch schon drin meine ich.

sudo snap install counter

Ausgabe nach

counter --help
Usage:
  counter [OPTION…]

Help Options:
  -h, --help                  Show help options
  --help-all                  Show all help options
  --help-gapplication         Show GApplication options
  --help-gtk                  GTK+-Optionen anzeigen

Application Options:
  --display=ANZEIGE           X-Anzeige, die verwendet werden soll

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Na snap kommt mir nicht ins Haus!

Was sagen denn

1
2
counter --help-gtk  
counter --help-gapplication

- ist da nichts darunter?

sh4711

Anmeldungsdatum:
13. Februar 2011

Beiträge: 1181

Es ist sicherlich der beste Weg so wie user_unknown beschreibt zu schauen ob das Programm mittels Startparameter dazu zu bringen ist das zu machen was man möchte.
Falls das nicht funktioniert kann man z.B. mit wmctrl Fenster anpassen. Der folgende Aufruf startet meinen Editor mousepad, wartet (sleep) eine Sekunde und "unmaximized" das aktive Fenster (also meinen Editor mousepad der maximiert startete)

$mousepad & sleep 1; wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz

Quelle/Basis: how-to-close-minimize-and-maximize-a-specified-window-from-terminal

Ersetze mousepad durch counter und starte es z.B. in einem Terminalfenster. Je nach Geschwindigkeit müsste man "sleep 1" auf z.B. 2 oder 3 erhöhen, damit sichergestellt ist, dass das Programm Counter fertig geladen wurde bzw. ein aktiviertes Fenster anzeigt bevor wmctrl das aktive Fenster manipuliert.
Nachteil: Das Verfahren ist fehleranfällig und counter wird zunächst maximiert gestartet und wird nach ca. 1 Sekunde wieder "unmaximiert" (entschuldigt bitte gibt es dafür ein besseres Wort?). Das heißt es kommt zu einem kleinen "Flackern".

taildragger schrieb:

... Oder hat Ubuntu sogar eine Funktion dafür, welche ich noch nicht entdeckt habe? ...

Wenn ich das richtig lese sollte es auch mit compiz gehen das habe ich jedoch noch nicht hinbekommen.

Zu guter Letzt:
Manche Programme starten so wie sie geschlossen wurden. Z.B. wird mousepad maximiert geschlossen, so wird es maximiert auch beim nächsten Start wieder geöffnet. Genau so passiert es wenn es nicht maximiert geschlossen wird.

taildragger

(Themenstarter)
Avatar von taildragger

Anmeldungsdatum:
11. Mai 2016

Beiträge: 101

Wohnort: Löwenberger Land

user_unknown schrieb:

Na snap kommt mir nicht ins Haus!

Was sagen denn

1
2
counter --help-gtk  
counter --help-gapplication

- ist da nichts darunter?

counter --help-gtk
Usage:
  counter [OPTION…]

GTK+-Optionen
  --class=KLASSE              Programmklasse wie sie vom Fenstermanager verwendet wird
  --name=NAME                 Programmname, der vom Fenstermanager benutzt wird
  --display=ANZEIGE           X-Anzeige, die verwendet werden soll
  --gdk-debug=OPTIONEN        Zu übergebende GDK-Fehlerdiagnoseoptionen
  --gdk-no-debug=OPTIONEN     Nicht zu übergebende GDK-Fehlerdiagnoseoptionen
  --gtk-module=MODULE         Zusätzliche GTK+-Module laden
  --g-fatal-warnings          Alle Warnungen als fatal betrachten
  --gtk-debug=OPTIONEN        Zu übergebende GTK+-Fehlerdiagnoseoptionen
  --gtk-no-debug=OPTIONEN     Nicht zu übergebende GTK+-Fehlerdiagnoseoptionen
counter --help-gapplication
Usage:
  counter [OPTION…]

GApplication options
  --gapplication-service      Enter GApplication service mode (use from D-Bus service files)

taildragger

(Themenstarter)
Avatar von taildragger

Anmeldungsdatum:
11. Mai 2016

Beiträge: 101

Wohnort: Löwenberger Land

@sh4711

danke für die Tipps, dass versuche ich im Notfall.

Also normales schließen und öffnen in der selben Größe funktioniert halt nicht. Das Ding startet immer maximiert..

Vielleicht kennt ja auch jemand noch ein anderes Programm. Ich brauche halt einen kleinen Counter... der hoch zählt wenn ich drauf klicke, den ich an eine Bildschirmecke in den Vordergrund packen kann..

Ich hab halt nur den gefunden... 😐

Für Android nebst Forks... gibt es gefühlt 100.000 apps dafür... bei Linux-Desktops offenbar Mangelware...

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Hm. Dann weiß ich auch nicht, und verweise auf sh4711s wmctl.

Oder Du schaust bei:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
apt search stopwatch
Sorting... Done
Full Text Search... Done
gnome-clocks/bionic 3.28.0-1 amd64
  Simple GNOME app with stopwatch, timer, and world clock support

kronometer/bionic 2.2.1-2 amd64
  simple stopwatch application

libtime-stopwatch-perl/bionic,bionic 1.00-5 all
  Perl module to use tied scalars as timers

php-symfony-stopwatch/bionic-updates,bionic-updates,bionic-security,bionic-security 3.4.6+dfsg-1ubuntu0.1 all
  profile PHP code

stopwatch/bionic,bionic 3.5-6 all
  Virtual stopwatch and timer

timewarrior/bionic 1.0.0+ds.1-3 amd64
  feature-rich time tracking utility

taildragger

(Themenstarter)
Avatar von taildragger

Anmeldungsdatum:
11. Mai 2016

Beiträge: 101

Wohnort: Löwenberger Land

ok - trotzdem vielen Dank für die Mühe! ☺

Ich probiere das mal von sh4711.

Danke user_unknown

sh4711

Anmeldungsdatum:
13. Februar 2011

Beiträge: 1181

Alternativ zu den Programmvorschlägen von user_unknown kannst du auch warten bis jemand hier ein (z.B. python) skript postetet das das kann. Python kann ich leider nicht von daher hier Lazarus-Code im Anhang als Zip Datei. Wenn hier Interesse besteht bitte kurze Rückmeldung bei Fragen zur Kompilierung.

lcounter.zip (124.4 KiB)
Download lcounter.zip

sh4711

Anmeldungsdatum:
13. Februar 2011

Beiträge: 1181

Oder alternativ als Bash-Script dann muss nichts kompiliert werden:

#!/bin/bash
i="0"

(sleep 1 && wmctrl -F -a "Bash Counter" -e 0,800,10,100,100 && wmctrl -F -a "Bash Counter" -b add,above) &
while (zenity --info --title="Bash Counter" --text="$i")
  do
  ((i++))
  (sleep 0.5 && wmctrl -F -a "Bash Counter" -e 0,800,10,100,100 && wmctrl -F -a "Bash Counter" -b add,above) &
done

Quelle/Basis: keep-a-zenity-dialog-box-always-on-top-in-foreground

Das Skript benötigt die Installaton von wmctrl und zenity

Nachteil: Zenity Fenster werden immer zentriert dargestellt. Durch das Verschieben an die x,y Position -e 0,800,10,100,100 kommt es zu einem deutlichen Flackern 😢

Wenn jemand noch eine bessere Idee hat wie man das Flackern minimieren kann dann ... besten Dank.

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 832

Wohnort: Hamburg

eine bessere idee, den entwickler des programms anschreiben und bitten das er es implementiert wennes für "taildragger" so wichtig ist.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13215

taildragger schrieb:

Ich probiere das mal von sh4711.

Hast Du denn mal counter --geometry=100x200 versucht? Vielleicht tut es ja.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11265

Wohnort: München

micneu schrieb:

eine bessere idee, den entwickler des programms anschreiben und bitten das er es implementiert wennes für "taildragger" so wichtig ist.

Falls es um https://snapcraft.io/counter geht, wird der vermutlich nichts machen, das das Nebenprodukt eines Tutorials, wie man eine Flutter-App als Snap verpackt. Dementsprechend kann man das selber in theshivamlko/flutter-desktop-linux-snapcraft/blob/master/linux/my_application.cc anpassen und sich ein Snap bauen...

sh4711 schrieb:

Alternativ zu den Programmvorschlägen von user_unknown kannst du auch warten bis jemand hier ein (z.B. python) skript postetet das das kann.

Mit Python3 könnte man z.B. sowas machen (läuft unter Ubuntu 20.04, aber da sind einige Dinge dabei, die mit neueren GTK3-Versionen nicht mehr so einfach funktionieren, an die Bildschirmgröße zu kommen erfordert da einige Umbauarbeiten):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/env python3
import gi

gi.require_version("Gdk", "3.0")
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk

screen = Gdk.Screen.get_default()
gtk_provider = Gtk.CssProvider()
gtk_context = Gtk.StyleContext()
gtk_context.add_provider_for_screen(screen, gtk_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
css = """
#styled_label {
    font: bold 16 px;
}
#styled_box {
    margin: 10px ;

}
"""
gtk_provider.load_from_data(css.encode())


class MyWindow(Gtk.Window):
    def __init__(self):
        self.counter = 0
        Gtk.Window.__init__(self, title="Counter")

        self.box = Gtk.Box(spacing=10)
        self.box.set_name("styled_box")
        self.add(self.box)

        self.inner_box = Gtk.Box(spacing=10)
        self.box.add(self.inner_box)

        self.label = Gtk.Label(label=f"{self.counter: 5d}")
        self.label.set_name("styled_label")
        self.inner_box.add(self.label)

        self.button = Gtk.Button(label="+")
        self.button.connect("clicked", self.on_button_clicked)
        self.inner_box.add(self.button)
        self.reset_button = Gtk.Button(label="\u27F3")
        self.reset_button.connect("clicked", self.on_reset_button_clicked)
        self.inner_box.add(self.reset_button)

    def on_button_clicked(self, widget):
        self.counter += 1
        self.label.set_text(f"{self.counter: 5d}")

    def on_reset_button_clicked(self, widget):
        self.counter = 0
        self.label.set_text(f"{self.counter: 5d}")


if __name__ == '__main__':
    win = MyWindow()
    win.set_gravity(Gdk.Gravity.NORTH_EAST)  # position is measured by the right upper corner of the window
    win.move(screen.width(), 0)  # move to the top right corner
    win.set_keep_above(True)  # keep on top of other windows
    win.set_default_size(100, 50)
    win.connect("destroy", Gtk.main_quit)

taildragger

(Themenstarter)
Avatar von taildragger

Anmeldungsdatum:
11. Mai 2016

Beiträge: 101

Wohnort: Löwenberger Land

rklm schrieb:

taildragger schrieb:

Ich probiere das mal von sh4711.

Hast Du denn mal counter --geometry=100x200 versucht? Vielleicht tut es ja.

nee - geht leider nicht.

Antworten |