[linux] breedte console achterhalen

Pagina: 1
Acties:

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 16:00

NetForce1

(inspiratie == 0) -> true

Topicstarter
Is het mogelijk om het aantal beschikbare kolommen in een console-venster te achterhalen in bash, zonder extra programma's ed te installeren. Ik moet nl. een script schrijven dat de output weergeeft, maar het komt nogal eens voor dat een regel langer is dan het scherm breed, nu kan ik wel aannemen dat het scherm altijd 80 kolommen breed is, maar het lijkt me wel leuk als 'ie zich automatisch aanpast aan de breedte.

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • blaataaps
  • Registratie: Juli 2001
  • Niet online
De variabele $COLUMNS bevat, jawel, de hoeveelheid kolommen :)
Dit had je zelf ook wel kunnen vinden door te zoeken in man bash volgens mij, het is namelijk gelijk de eerste "hit" als ik zoek in die manpage.
COLUMNS
Used by the select builtin command to determine the terminal width when printing selection lists. Automatically
set upon receipt of a SIGWINCH.

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 16:00

NetForce1

(inspiratie == 0) -> true

Topicstarter
die had ik idd al wel gevonden, maar ik las ook ergens (geen flauw id meer waar) dat die niet altijd geset is, of is dat alleen bij uitzonderlijke gevallen?

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • raoulduke
  • Registratie: Oktober 2003
  • Niet online

raoulduke

Get in!

Je kan eventueel ook kijken of je een ncurses gebaseerde applicatie kan bouwen. Deze library vind je op http://www.gnu.org/software/ncurses/ .

Remember, if you have any trouble you can always send a telegram to the Right People.


  • NetForce1
  • Registratie: November 2001
  • Laatst online: 16:00

NetForce1

(inspiratie == 0) -> true

Topicstarter
raoulduke schreef op 06 mei 2004 @ 23:20:
Je kan eventueel ook kijken of je een ncurses gebaseerde applicatie kan bouwen. Deze library vind je op http://www.gnu.org/software/ncurses/ .
Dat gaat niet, want de docent moet het ook kunnen draaien, en die word niet blij als ie voor iedereen dit soort dingen moet gaan installeren.

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 27-01 13:59
NetForce1 schreef op 06 mei 2004 @ 23:20:
die had ik idd al wel gevonden, maar ik las ook ergens (geen flauw id meer waar) dat die niet altijd geset is, of is dat alleen bij uitzonderlijke gevallen?
windows/cygwin (bash shell)
code:
1
2
3
$ set | egrep COLUMNS\|LINES
COLUMNS=80
LINES=25

openbsd/xterm
code:
1
2
3
root@tech-no-logical:~# set | egrep  COLUMNS\|LINES
COLUMNS=140
LINES=25

linux/xterm
code:
1
2
3
peter@ns:~$ set | egrep  COLUMNS\|LINES
COLUMNS=101
LINES=26

linux/cygwin (doorgelogd met ssh)
code:
1
2
3
peter@fire:~$ set | egrep COLUMNS\|LINES
COLUMNS=80
LINES=25

werkt best aardig :-)

[ Voor 4% gewijzigd door tech-no-logical op 06-05-2004 23:40 ]


Verwijderd

NetForce1 schreef op 06 mei 2004 @ 23:20:
die had ik idd al wel gevonden, maar ik las ook ergens (geen flauw id meer waar) dat die niet altijd geset is, of is dat alleen bij uitzonderlijke gevallen?
$COLUMNS is geset als de shell verbonden is aan een tty, m.a.w. alleen als het een interactieve shell is die inderdaad dingen kan laten zien; geen probleem dus neem ik aan. Het stukje dat blaataaps quote waarschuwt er overigens voor dat de waarde van $COLUMNS veranderen kan tijdens het draaien van je script (als de shell in een window draait dat geresized wordt).

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 16:00

NetForce1

(inspiratie == 0) -> true

Topicstarter
Ik heb het ff geprobeerd, vanaf de commandline doetie het idd perfect, maar vanuit een script kan ik er niet bij komen. En als ik 'set' in een script zet, geeft ie ook veel minder variabelen terug dan wanneer ik set vanaf de commandline aanroep :?

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Verwijderd

NetForce1 schreef op 07 mei 2004 @ 09:38:
Ik heb het ff geprobeerd, vanaf de commandline doetie het idd perfect, maar vanuit een script kan ik er niet bij komen. En als ik 'set' in een script zet, geeft ie ook veel minder variabelen terug dan wanneer ik set vanaf de commandline aanroep :?
De truuk is bash een SIGWINCH te sturen zodat hij $COLUMNS en $LINES zetten moet:
code:
1
2
kill -WINCH $$
echo $COLUMNS x $LINES


Een andere mogelijkheid is bash met -i op te starten:
code:
1
2
#!/bin/bash -i
echo $COLUMNS x $LINES

[ Voor 12% gewijzigd door Verwijderd op 07-05-2004 10:55 ]


  • NetForce1
  • Registratie: November 2001
  • Laatst online: 16:00

NetForce1

(inspiratie == 0) -> true

Topicstarter
Dat werkt idd, thanks! Maar dan moet het script wel gestart worden met
code:
1
. ./script

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Verwijderd

NetForce1 schreef op 07 mei 2004 @ 11:08:
Dat werkt idd, thanks! Maar dan moet het script wel gestart worden met
code:
1
. ./script
De tweede oplossing zou ook moeten werken als je het script gewoon opstart.

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 16:00

NetForce1

(inspiratie == 0) -> true

Topicstarter
./script geeft
code:
1
bash: ./script: /bin/bash: bad interpreter: Permission Denied

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Verwijderd

NetForce1 schreef op 07 mei 2004 @ 11:26:
./script geeft
code:
1
bash: ./script: /bin/bash: bad interpreter: Permission Denied
Doe eens:
code:
1
chmod u+x script

Het script moet executable zijn, anders kun je het i.d.d. alleen maar sourcen (met . ./script)

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 16:00

NetForce1

(inspiratie == 0) -> true

Topicstarter
Verwijderd schreef op 07 mei 2004 @ 11:31:
[...]

Doe eens:
code:
1
chmod u+x script

Het script moet executable zijn, anders kun je het i.d.d. alleen maar sourcen (met . ./script)
|:( Ik had ff een test-scriptje gemaakt wat dus alleen $COLUMNS op het scherm gooit, maar niet uitvoerbaar gemaakt.
./script voert nu wel het script uit, maar geeft een lege string terug, terwijl . ./script de inhoud van $COLUMNS teruggeeft

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Verwijderd

Als ik dit ingeef als "script.sh":
code:
1
2
#!/bin/bash -i
echo $COLUMNS x $LINES

En vervolgens executable maak:
code:
1
[mietje@loki prog]$ chmod u+x script.sh

Dan kan ik hem gewoon uitvoeren en geeft hij output:
code:
1
2
3
[mietje@loki prog]$ ./script.sh
80 x 24
[mietje@loki prog]$

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 16:00

NetForce1

(inspiratie == 0) -> true

Topicstarter
Strange, dan ligt het blijkbaar aan mijn machientje. Ik heb nu geen andere linux-comp tot mn beschikking, maar ik zal het volgende week is proberen op de uni

.edit: khad nog een knoppix-cd liggen, maar die weigert eveneens

[ Voor 19% gewijzigd door NetForce1 op 07-05-2004 12:36 ]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Verwijderd

NetForce1 schreef op 07 mei 2004 @ 12:25:
Strange, dan ligt het blijkbaar aan mijn machientje. Ik heb nu geen andere linux-comp tot mn beschikking, maar ik zal het volgende week is proberen op de uni
Raar hoor, maar ik heb nog een andere mogelijke oplossing :)

Heb je tput geinstalleerd? Zo ja:
code:
1
tput cols

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 16:00

NetForce1

(inspiratie == 0) -> true

Topicstarter
woei, die heb ik ja, zowel op knoppix als op me debian. Nu maar hopen dat me docent em ook heeft

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • odysseus
  • Registratie: Augustus 2000
  • Nu online

odysseus

Debian GNU/Linux Sid

NetForce1 schreef op 06 mei 2004 @ 23:26:
Dat gaat niet, want de docent moet het ook kunnen draaien, en die word niet blij als ie voor iedereen dit soort dingen moet gaan installeren.
Dat ging over ncurses.
NetForce1 schreef op 07 mei 2004 @ 12:43:
woei, die heb ik ja, zowel op knoppix als op me debian. Nu maar hopen dat me docent em ook heeft
En dat gaat over tput, een onderdeel van ncurses 8)7.

Ergo: als je tput gebruikt, kan je net zo goed helemaal ncurses gaan gebruiken :).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • NetForce1
  • Registratie: November 2001
  • Laatst online: 16:00

NetForce1

(inspiratie == 0) -> true

Topicstarter
odysseus schreef op 07 mei 2004 @ 13:53:
[...]

Dat ging over ncurses.


[...]

En dat gaat over tput, een onderdeel van ncurses 8)7.

Ergo: als je tput gebruikt, kan je net zo goed helemaal ncurses gaan gebruiken :).
ok :z, om eerlijk te zijn heb ik speciaal voor deze opdracht linux op me servert geinstalleerd. Ik had al wat disto's liggen, maar nooit echt serieus in verdiept (SuSE, RH, knoppix). Ik heb echt halve nachten zitten info-en en mannen, en dan ben je best blij als het zomaar werkt :+ . Maar kzal ncurses nog maar es ff bekijken dan

[ Voor 3% gewijzigd door NetForce1 op 07-05-2004 14:28 ]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Verwijderd

NetForce1 schreef op 07 mei 2004 @ 14:21:
ok :z, om eerlijk te zijn heb ik speciaal voor deze opdracht linux op me servert geinstalleerd. Ik had al wat disto's liggen, maar nooit echt serieus in verdiept (SuSE, RH, knoppix). Ik heb echt halve nacht zitten info-en en mannen, en dan ben je best blij als het zomaar werkt :+ . Maar kzal ncurses nog maar es ff bekijken dan
Ik het het probleem met bash en $COLUMNS eens uitgezocht; het blijkt dat bash versie 1 .x de problemen oplevert, terwijl bash2 het (met wat tweaks) wel doet:
code:
1
2
3
4
#!/bin/bash2 -i
shopt -s checkwinsize
kill -WINCH $$
echo $COLUMNS x $LINES

[ Voor 8% gewijzigd door Verwijderd op 07-05-2004 14:45 ]


Verwijderd

stty is het commando "to be"
Je kunt er alles over je console me instellen en uitlezen:
skipjack $ stty -a
speed 38400 baud; 51 rows; 80 columns;
lflags: icanon isig iexten echo echoe echok echoke -echonl echoctl
-echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
-extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff -ixany imaxbel -ignbrk
brkint -inpck ignpar -parmrk
oflags: opost onlcr -ocrnl -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd -hupcl -clocal -cstopb -crtscts
-dsrflow -dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
eol2 = <undef>; erase = ^?; erase2 = ^H; intr = ^C; kill = ^U;
lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = ^Q;
status =this.href + ' label: ' +this.href + ' label: ' + ^T; stop = ^S; susp = ^Z; time = 0; werase = ^W;
skipjack $
Je hoeft hier niets voor te zetten of resetten. Hoewel de "speed" natuurlijk nergens op slaat :)

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 16:00

NetForce1

(inspiratie == 0) -> true

Topicstarter
Verwijderd schreef op 07 mei 2004 @ 14:37:
[...]


Ik het het probleem met bash en $COLUMNS eens uitgezocht; het blijkt dat bash versie 1 .x de problemen oplevert, terwijl bash2 het (met wat tweaks) wel doet:
code:
1
2
3
4
#!/bin/bash2 -i
shopt -s checkwinsize
kill -WINCH $$
echo $COLUMNS x $LINES
Werkt nog steeds niet, ik heb btw bash 2.05. Ik ga denk dus toch maar voor die andere oplossing(en).
Kan ik er vanuit gaan dat ncurses altijd geinstalleerd is? Ik denk het wel, omdat het onderdeel is van System V. Of blaat ik nu heel erg onzin?
code:
1
tput cols
staat nl iets leuker dan
code:
1
stty size | awk '{print $2}'
:)

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • odysseus
  • Registratie: Augustus 2000
  • Nu online

odysseus

Debian GNU/Linux Sid

NetForce1 schreef op 07 mei 2004 @ 20:22:
Kan ik er vanuit gaan dat ncurses altijd geinstalleerd is? Ik denk het wel, omdat het onderdeel is van System V. Of blaat ik nu heel erg onzin?
Ncurses is geen onderdeel van System V, maar het heeft wel de prioriteit "Required" in Debian. Dat betekent dat je het op elk Debian-systeem mag verwachten en dat de kans groot is dat ook andere distributies het standaard installeren :).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Verwijderd

Laatst Xnest gevonden en geinstalleerd. Leuk tooltje. Nu wil ik een opstartscripje maken om Xnest te starten binnen het huidige scherm. Dat scherm varieert, want soms werk ik 'native' op de computer. Da's nie fijn. Hij staat op zolder naast de kattebak en die oude S3 videokaart haalt er niet meer dan 800x600 uit.
Dan zit ik liever beneden met mijn laptop op schoot en dan ben ik soms onder XP met cygwin naar zolder-linux of soms met een andere linux (X -query 192.168.bla.bla :1).

Terug op topic: is het mogelijk om de hoogte x breedte in pixels van je huidige Xsessie uit te vragen? Dan kan ik daar een forumule op los laten en dat in het Xnest opstartscript verwerken.

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 16:00

NetForce1

(inspiratie == 0) -> true

Topicstarter
Verwijderd schreef op 08 mei 2004 @ 11:24:
Laatst Xnest gevonden en geinstalleerd. Leuk tooltje. Nu wil ik een opstartscripje maken om Xnest te starten binnen het huidige scherm. Dat scherm varieert, want soms werk ik 'native' op de computer. Da's nie fijn. Hij staat op zolder naast de kattebak en die oude S3 videokaart haalt er niet meer dan 800x600 uit.
Dan zit ik liever beneden met mijn laptop op schoot en dan ben ik soms onder XP met cygwin naar zolder-linux of soms met een andere linux (X -query 192.168.bla.bla :1).

Terug op topic: is het mogelijk om de hoogte x breedte in pixels van je huidige Xsessie uit te vragen? Dan kan ik daar een forumule op los laten en dat in het Xnest opstartscript verwerken.
misschien is dit wat? http://www.xfree86.org/4.4.0/xrdb.1.html

[ Voor 85% gewijzigd door NetForce1 op 08-05-2004 11:43 ]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • odysseus
  • Registratie: Augustus 2000
  • Nu online

odysseus

Debian GNU/Linux Sid

Daarvoor lijkt xdpyinfo mij een geschikter programma - een commando als 'xdpyinfo | grep dimensions | cut -d\ -f 7' geeft hier de juiste resolutie terug :).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Verwijderd

Scriptje gemaakt, je kan Xnest nu helemaal gék nesten (xnest binnen xnest binnen xnest....)
code:
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
#!/bin/sh
# Obtain current session values
#
declare -i width=$(xdpyinfo | grep -i dimension | awk '{ print $2 }' | awk 'BEGIN { FS = "x" } {print $1}')
declare -i heigt=$(xdpyinfo | grep -i dimension | awk '{ print $2 }' | awk 'BEGIN { FS = "x" } {print $2}')
# Compute new values (more from height, need the room for taksbars and so on)
#
(( width += -32 ))
(( heigt += -96 ))
#
if [ -z ${1} ]
then
   echo "Geen parameter? Doe het dan maar met jezelf!"
   gastheer=localhost
else
   gastheer=${1}
fi
#
for s in {10,11,12,13,14,15,16,17,18,19}
do
   if [ ! -e /tmp/.X${s}-lock ]
   then
      /usr/X11R6/bin/Xnest -name ${gastheer}:${s} -query ${gastheer} -once -geometry ${width}x${heigt} :${s}
      exit 0
   fi
done
#
echo "meer dan 10 sessies? Dat meen je niet. Sterker nog, dat doe ik niet!"
exit 1
#
Pagina: 1