cosmos72 / twin Goto Github PK
View Code? Open in Web Editor NEWText mode window environment. A "retro" program for embedded or remote systems, that doubles as X11 terminal and text-mode equivalent of VNC server
License: Other
Text mode window environment. A "retro" program for embedded or remote systems, that doubles as X11 terminal and text-mode equivalent of VNC server
License: Other
Would you like to add the configuration script “AX_PTHREAD” to your build specification?
As reported by Mirppc and ghostlands in issue #4 the menu, background pattern and window borders drawn by twin are corrupted when twin is running inside an xterm or xterm-like (konsole, gnome-terminal, xfce4-terminal...)
See also http://susepaste.org/12491768
This is a known limitation.
Until I find the time to fix it (at least partially), two workarounds are:
Hello Max,
from the .twinrc example I can see there is a possibility to change window borders via:
Border "*" Active (
"ÉÍ»"
"º º"
"Èͼ"
)
what kind of characters are expected here ?.. -- everything I'm trying is just giving me kind of "hieroglyphs" printed around window ;-))
even the following "simple" one:
Border "*" Active (
"+=+"
"| |"
"+=+"
)
Thank you for your help !
Rgds,
-Dimitri
What exactly is the reason for libtt being disabled?
If I don't use getty at the TTY, but twdm and I login to startx, I get dbus errors. Steam complains about dbus errors, and systemctl is unable to load user entries.
If I start X from getty, no problems arise. I don't know what causes this or if you are aware of this. I will give any info that is needed.
journalctl
juli 18 18:19:29 blackbox org.gtk.vfs.Daemon[12557]: A connection to the bus can't be made
juli 18 20:52:06 blackbox gvfsd[12497]: A connection to the bus can't be made
juli 18 22:34:06 blackbox org.gtk.vfs.Daemon[18435]: A connection to the bus can't be made
Steam spams with
Failed to connect to bus: No such file or directory
On one of my machines with Twin installed i was having some graphical issues with Nurces within ncurses under a Twin terminal.
I was having some graphics drivers issues with my server/workstation so i booted into a TTY session and ran TWIN so i could have multiple movable terminals using GPM a (mouse) to maneuver around and fix X.
I then had to run inside one of the terminals a Ncurses based program called YAST2 to fix some broken packages and modify my booloader. Yast uses Ncurses just like Twin and on my Opensuse machines i usually know when TWIN will be broken on a tty/ssh if Yast has the same glitchyness.
So i had TWIN running fine with no visual issues whatso ever but when i ran YAST or the Nvidia driver installer in a terminal within TWIN the ncurses interface was covered in weird symbols and non of the text was readable. i then tested out ALSAMIXER to find the same results.
My hypothesis is that Twin doesn't want or like Ncurses to go all Inception.
I will test on a ubuntu/debian machine once i can get TWIN properly compiled on a non-embedded device.
System specs of the machine with the issue;
Opensuse 13.2 64bit Dual Intel X5355s 2.6ghz quadcore xeon, 16gb DDR2 FBDIMM, Nvidia GT730 2gb
Screenshots once California cools down enough to work where my computer stations are.
Twin is nice :)
I installed it with --prefix=/opt/twin
and found only one problem: the twin
wrapper does not find twin_server
because it insists on /usr/local/bin/twin_server
.
This is caused by the prefix BINDIR
which is not defined for server/wrapper.c
and not relative like in client/dm.c
. A simple workaround that worked for me was to replace twin
with a symbolic link to twin_server
in the targeted prefix,
rm /opt/twin/bin/twin
ln -s twin_server /opt/twin/bin/twin
It would of course also be possible to parse argv[0]
in server/wrapper.c
replace the last component, but that's more work.
Would be great to add a kind of "keep alive" option to twdisplay (and maybe other) which could involve then every N seconds a single packet to send over a network to be sure:
Thank you !
Rgds,
-Dimitri
TWIN works great in ttyd and really adds value there; for TWDM there was a need to add a one-shot option, as a resource is not freed otherwise. See PR #46 for details.
Since both TTYD and MOSH use xterm-256color
displays, I expected TWIN to work well with MOSH too. But it does not!
To replicate:
mosh twin.host.with.mosh /path/to/twin_server 2>&1 | tee /tmp/twout
Spelling out the ANSI codes, this logs:
ESC[?1049hESC[?1hESC[?5lESC[1;25rESC[0mESC[HESC[2JESC[KESC[1;1HESC[K ESC[?25lESC[2;1HESC[KESC[2;1HESC[K ESC[3;1HESC[KESC[3;1HESC[K ESC[4;1HESC[KESC[4;1HESC[K
ESC[5;1HESC[KESC[5;1HESC[K ESC[6;1HESC[KESC[6;1HESC[K ESC[7;1HESC[KESC[7;1HESC[K ESC[8;1HESC[KESC[8;1HESC[K ESC[9;1HESC[KESC[9;1HESC[K ESC[10;1HESC[KESC[10;1H
ESC[K ESC[11;1HESC[KESC[11;1HESC[K ESC[12;1HESC[KESC[12;1HESC[K ESC[13;1HESC[K
ESC[13;1HESC[K ESC[14;1HESC[KESC[14;1HESC[K ESC[15;1HESC[KESC[15;1HESC[K ESC[16;1HESC[KESC[16;1HESC[K ESC[17;1HESC[KESC[17;1HESC[K ESC[18;1HESC[KESC[18;1HESC[K ESC[19;1HESC[KESC[19;1HESC[K ESC[20;1HESC[KESC[20;1HESC[K ESC[21;1HESC[KESC[21;1HESC[K ESC[22;1HESC[KESC[22;1HESC[K ESC[23;1HESC[KESC[23;1HESC[K ESC[24;1HESC[K
ESC[24;1HESC[K ESC[25;1HESC[KESC[1;1HESC[?25hESC[0mESC[?2004lESC[?1003lESC[?1002lESC[?1001lESC[?1000lESC[?1004lESC[?1015lESC[?1006lESC[?1005lESC[?25lESC[2;1Htwin: starting display driver module `hw_tty'...ESC[3;1H linux_InitVideo() failed: terminal `xterm-256color' is not `linux'.ESC[4;1Htwin: ...module `hw_tty' failed to start.ESC[5;1Htwin: all display drivers failed for `-hw=tty'ESC[7;1Htwin: ESC[0;1mALL DISPLAY DRIVERS FAILED. QUITTING.ESC[8;1HESC[?25hESC[0mESC[?1lESC[0mESC[?25hESC[?1003lESC[?1002lESC[?1001lESC[?1000lESC[?1015lESC[?1006lESC[?1005lESC[?1049l
[mosh is exiting.]
in readable terms, that's
twin: starting display driver module `hw_tty'...
linux_InitVideo() failed: terminal `xterm-256color' is not `linux'
twin: ...module `hw_tty' failed to start
twin: all display drivers failed for `-hw=tty'
twin: ALL DISPLAY DRIVERS FAILED. QUITTING.
[mosh is exiting.]
My suspicion is that something makes TWIN think that MOSH is like a Linux environment, in spite of having TERM=xterm-256color
set, and then bogs down to refusal because it is not actually TERM=linux
compliant.
Note: Fixing this would mean that TWIN can be used virtually anywhere, even on Mac OS X with iTerm.app
, which is why I am chasing this. It also seems like MOSH and TWIN are a marriage made in heaven -- just think of train rides with "graphical" interactivity as a big thank you to the textual nature of the display!
Hello Max,
any existing or potential solution to support mouse wheel / trackpad scrolling in TWIN windows ?.. -- would be really cool ;-))
Rgds,
-Dimitri
I don't know/think if it's possible to run links (web browser) in graphical mode under twin in console mode.
links -g bugs out with
Could not initialize any graphics driver. Tried the following drivers:
x:
Can't open display "(null)"
fb:
Could not get VT mode.
It would be a great feature to run links in graphical mode under twin with no X.
However, I understand if it's not feasible. Just an idea.
I would like to add that I can run a 1440p video under twin using mplayer -vo fbdev2 with no issues.
mplayer -vo fbdev2 -x 1280 -y 720 File.extension works perfectly, as an example.
I understand this might be a limitation with Links, but I'd love to have a working graphical web browser in twin. I think it'd compliment it.
I get the following error when trying to compile twin:
libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../../include -I../../include -g -O2 -MT libTw2_i386.lo -MD -MP -MF .deps/libTw2_i386.Tpo -c libTw2_i386.S -DDLL_EXPORT -DPIC -o .libs/libTw2_i386.o
/usr/include/machine/_default_types.h: Assembler messages:
/usr/include/machine/_default_types.h:41: Error: no such instruction: `typedef signed char __int8_t'
/usr/include/machine/_default_types.h:43: Error: no such instruction: `typedef unsigned char __uint8_t'
/usr/include/machine/_default_types.h:55: Error: no such instruction: `typedef short int __int16_t'
/usr/include/machine/_default_types.h:57: Error: no such instruction: `typedef short unsigned int __uint16_t'
/usr/include/machine/_default_types.h:77: Error: no such instruction: `typedef int __int32_t'
/usr/include/machine/_default_types.h:79: Error: no such instruction: `typedef unsigned int __uint32_t'
/usr/include/machine/_default_types.h:103: Error: no such instruction: `typedef long long int __int64_t'
/usr/include/machine/_default_types.h:105: Error: no such instruction: `typedef long long unsigned int __uint64_t'
/usr/include/machine/_default_types.h:134: Error: no such instruction: `typedef signed char __int_least8_t'
/usr/include/machine/_default_types.h:136: Error: no such instruction: `typedef unsigned char __uint_least8_t'
/usr/include/machine/_default_types.h:160: Error: no such instruction: `typedef short int __int_least16_t'
/usr/include/machine/_default_types.h:162: Error: no such instruction: `typedef short unsigned int __uint_least16_t'
/usr/include/machine/_default_types.h:182: Error: no such instruction: `typedef int __int_least32_t'
/usr/include/machine/_default_types.h:184: Error: no such instruction: `typedef unsigned int __uint_least32_t'
/usr/include/machine/_default_types.h:200: Error: no such instruction: `typedef long long int __int_least64_t'
/usr/include/machine/_default_types.h:202: Error: no such instruction: `typedef long long unsigned int __uint_least64_t'
/usr/include/machine/_default_types.h:214: Error: no such instruction: `typedef long long int __intmax_t'
/usr/include/machine/_default_types.h:222: Error: no such instruction: `typedef long long unsigned int __uintmax_t'
/usr/include/machine/_default_types.h:230: Error: no such instruction: `typedef int __intptr_t'
/usr/include/machine/_default_types.h:232: Error: no such instruction: `typedef unsigned int __uintptr_t'
/usr/lib/gcc/i686-pc-cygwin/6.4.0/include/stddef.h:149: Error: no such instruction: `typedef int ptrdiff_t'
/usr/lib/gcc/i686-pc-cygwin/6.4.0/include/stddef.h:216: Error: no such instruction: `typedef unsigned int size_t'
/usr/lib/gcc/i686-pc-cygwin/6.4.0/include/stddef.h:328: Error: no such instruction: `typedef short unsigned int wchar_t'
make[2]: *** [Makefile:494: libTw2_i386.lo] Error 1
make[2]: Leaving directory '/home/roberc51/twin/libs/libTw'
make[1]: *** [Makefile:402: all-recursive] Error 1
make[1]: Leaving directory '/home/roberc51/twin/libs'
make: *** [Makefile:527: all-recursive] Error 1
Hi there,
I am experiencing this graphical issue in tty I recorded in video:
https://drive.google.com/open?id=1ntvYFmsvMYXlli_NLMhEeMZrxvJtwtOn (I suggest you download the video instead of watching it online).
I suspect it might be related to the fact I installed a 8x19 console font and set it as default some time ago. However, I need to do more tests in order to confirm this. I load it through the FONT
variable in /etc/vconsole.conf
, as https://wiki.archlinux.org/index.php/Fonts#Console_fonts suggests.
The font I'm using: VGASquarePx.psf.gz
EDIT: I went back to the default console font and rebooted, but the problem still persists. I don't know what the cause might be.
I haven't experienced this with any other program. I don't know if this will be easy to reproduce. I can compile twin
with any debug options you need.
Thanks.
Htop is the best example. Pstree also looks awful. Other programs, like Mined and MP3blaster, look fine, so it certainly is possible to make lines and bars work in TWin.
Hello Max,
just discovered "by accident" that by pressing Ctrl-@ I'm immediately disconnecting in running twdisplay and exiting..
Thank you !!
Rgds,
-Dimitri
I am trying to make a simple IDE around text-based tooling. It is really helpful by keeping the demo/download small and fast, and the application needs nothing more, really.
Since twdialog did not look ready yet, I tried using plain dialog in a twterm. It crashes however, with a "Segmentation fault" message. What can I do to use it properly?
After QUITTING
because it found no gpm
in hw_tty
on the linux
console, control is not returned to the keyboard and shell. Nothing typed is shown, and not all platforms allow entry of commands. It appears that the keyboard and/or display are still in "raw" mode, rather than "cooked".
on an x86_64 musl linux host, gpm support does not get built even if it is specified in the configure phase, even though the headers and libraries exist.
$ [~]: find /usr/lib /usr/include | grep gpm
/usr/lib/libgpm.so.2.1.0
/usr/lib/libgpm.so.2
/usr/include/gpm.h
$ [~]: uname -rms
Linux 5.6.0-apathy-t61-r0.5-bmq x86_64
$ [~]: cat /etc/ld-musl-x86_64.path
/lib
/usr/lib
/opt/twin/lib
/opt/llvm-9.0.1/lib
$ [~]: echo $PATH
/opt/twin/bin:/opt/llvm-9.0.1/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mss/bin:/home/mss/execs
$ [work]: twin
twin: starting display driver module `hw_xft'...
X11_InitHW() failed: DISPLAY is not set
twin: ...module `hw_xft' failed to start.
twin: starting display driver module `hw_gfx'...
gfx_InitHW() failed: DISPLAY is not set
twin: ...module `hw_gfx' failed to start.
twin: starting display driver module `hw_X11'...
X11_InitHW() failed: DISPLAY is not set
twin: ...module `hw_X11' failed to start.
twin: starting display driver module `hw_twin'...
TW_InitHW() failed: TWDISPLAY is not set
twin: ...module `hw_twin' failed to start.
twin: starting display driver module `hw_tty'...
tty_InitHW(): gpm mouse support not compiled, skipping it.
xterm_InitMouse() failed: this `linux' terminal
has no support for xterm-style mouse reporting.
ALL MOUSE DRIVERS FAILED.
If you really want to run `twin' without mouse
hit RETURN within 10 seconds to continue,
otherwise hit CTRL-C (or wait 10 seconds) to cancel.
twin: ...module `hw_tty' failed to start.
twin: unable to load display driver module `hw_ggi' :
Error loading shared library /opt/twin/lib/twin/libhw_ggi-0.8.0.so: No such
file or directory
twin: all display drivers failed for `'
twin: ALL DISPLAY DRIVERS FAILED. QUITTING.
$PREFIX/twin/lib
and $PREFIX/twin/lib/twin
: $ [~]: ls -l /opt/twin/lib{,/twin}
/opt/twin/lib:
total 288K
-rwxr-xr-x 1 root root 921 Mar 4 00:40 libTutf.la
lrwxrwxrwx 1 root root 16 Mar 4 00:40 libTutf.so -> libTutf.so.1.0.0
lrwxrwxrwx 1 root root 16 Mar 4 00:40 libTutf.so.1 -> libTutf.so.1.0.0
-rwxr-xr-x 1 root root 159K Mar 4 00:40 libTutf.so.1.0.0
-rwxr-xr-x 1 root root 913 Mar 4 00:40 libTw.la
lrwxrwxrwx 1 root root 14 Mar 4 00:40 libTw.so -> libTw.so.5.0.0
lrwxrwxrwx 1 root root 14 Mar 4 00:40 libTw.so.5 -> libTw.so.5.0.0
-rwxr-xr-x 1 root root 115K Mar 4 00:40 libTw.so.5.0.0
drwxrwxr-x 2 root root 4.0K Mar 4 00:40 twin
/opt/twin/lib/twin:
total 692K
-rwxr-xr-x 1 root root 60K Mar 4 00:40 libhw_X11-0.8.0.so
-rwxr-xr-x 1 root root 977 Mar 4 00:40 libhw_X11.la
lrwxrwxrwx 1 root root 18 Mar 4 00:40 libhw_X11.so -> libhw_X11-0.8.0.so
-rwxr-xr-x 1 root root 23K Mar 4 00:40 libhw_display-0.8.0.so
-rwxr-xr-x 1 root root 970 Mar 4 00:40 libhw_display.la
lrwxrwxrwx 1 root root 22 Mar 4 00:40 libhw_display.so -> libhw_display-0.8.0.so
-rwxr-xr-x 1 root root 65K Mar 4 00:40 libhw_gfx-0.8.0.so
-rwxr-xr-x 1 root root 983 Mar 4 00:40 libhw_gfx.la
lrwxrwxrwx 1 root root 18 Mar 4 00:40 libhw_gfx.so -> libhw_gfx-0.8.0.so
-rwxr-xr-x 1 root root 58K Mar 4 00:40 libhw_tty-0.8.0.so
-rwxr-xr-x 1 root root 981 Mar 4 00:40 libhw_tty.la
lrwxrwxrwx 1 root root 18 Mar 4 00:40 libhw_tty.so -> libhw_tty-0.8.0.so
-rwxr-xr-x 1 root root 32K Mar 4 00:40 libhw_twin-0.8.0.so
-rwxr-xr-x 1 root root 1004 Mar 4 00:40 libhw_twin.la
lrwxrwxrwx 1 root root 19 Mar 4 00:40 libhw_twin.so -> libhw_twin-0.8.0.so
-rwxr-xr-x 1 root root 56K Mar 4 00:40 libhw_xft-0.8.0.so
-rwxr-xr-x 1 root root 994 Mar 4 00:40 libhw_xft.la
lrwxrwxrwx 1 root root 18 Mar 4 00:40 libhw_xft.so -> libhw_xft-0.8.0.so
-rwxr-xr-x 1 root root 72K Mar 4 00:40 librcparse-0.8.0.so
-rwxr-xr-x 1 root root 952 Mar 4 00:40 librcparse.la
lrwxrwxrwx 1 root root 19 Mar 4 00:40 librcparse.so -> librcparse-0.8.0.so
-rwxr-xr-x 1 root root 120K Mar 4 00:40 libsocket-0.8.0.so
-rwxr-xr-x 1 root root 950 Mar 4 00:40 libsocket.la
lrwxrwxrwx 1 root root 18 Mar 4 00:40 libsocket.so -> libsocket-0.8.0.so
-rwxr-xr-x 1 root root 58K Mar 4 00:40 libterm-0.8.0.so
-rwxr-xr-x 1 root root 934 Mar 4 00:40 libterm.la
lrwxrwxrwx 1 root root 16 Mar 4 00:40 libterm.so -> libterm-0.8.0.so
-rwxr-xr-x 1 root root 79K Mar 4 00:40 libwm-0.8.0.so
-rwxr-xr-x 1 root root 922 Mar 4 00:40 libwm.la
lrwxrwxrwx 1 root root 14 Mar 4 00:40 libwm.so -> libwm-0.8.0.so
-rwxr-xr-x 1 root root 759 Mar 4 00:40 system.twenvrc.sh
-rwxr-xr-x 1 root root 14K Mar 4 00:40 system.twinrc
Both configure.in and Makefiles contain a lot of ad-hoc rules, with varying degrees of bit-rot, to the point that I have not been able to regenerate the configure script since years... also, Makefiles do not use automake at all.
The whole build process depends on GNU make and bash, and is somewhat fragile.
Volunteers are welcome :)
Support for OS X is currently beta, testers welcome :)
Requires xcode with command line tools, xquartz.
Doubt: how to best recognize OS X: MACOSX or APPLE or sth else?
/usr/include/sys/socket.h:73:21: error: cannot combine with previous 'type-name' declaration specifier
typedef __socklen_t socklen_t;
^
../../include/twautoconf.h:666:19: note: expanded from macro 'socklen_t'
#define socklen_t int
..
...
/usr/include/sys/socket.h:73:21: error: cannot combine with previous 'type-name' declaration specifier
typedef __socklen_t socklen_t;
^
../include/Tw/autoconf.h:666:19: note: expanded from macro 'socklen_t'
I was at a friend's house installing twin for them on their Dell XPS 13 Developer Edition when we ran into the issue with font size. holy snap on a 4K 13" display everything was so tiny that Twin was unusable. It is also an issue with a TTY session as well, yet when running twin through X the font was utterly tiny. the dot in this i on my 1080p monitor was about the size of every character. Is there any way to change font sizes?
More and More people will be getting high resolution displays and this issue will become more prevalent as time goes on. This isnt an immediate issue but should be looked into at some point.
Thanks.
Thanks for twin.
Would it be possible that you update the Changelog.txt for the 0.8.0 release?
Is it a strange idea to support ZMODEM passthrough via a service in the event interface? I still think of it as a highly useful protocol, but it is ancient... so, to refresh your memory:
sz
or rz
as contained in package lrzsz
on a TTYD-supported terminalWhat could make sense?
sz
and rz
initiation frames to a central place, which connects them/dev/pts/7
to /dev/pts/12
)$HOME/Downloads
or dynamic plugins such as USB storage sticks may provide a ZMODEM upload/download target.twdialog
or dialog
could arrange file transmission via sz
.The flavour one would desire is a matter of taste, I suppose. All it requires is recognising the initial TTY codes for ZMODEM, and passing them to a central place in the TWIN environment that implements the personal taste.
I was wondering if it made sense to use your event system for these ZMODEM connections, but I cannot tell as I find the code difficult to follow. Any suggestions or guidance?
I was trying to compile twin for use on the 9 dollar computer called CHIP. In doing so i was getting some errors during the make section.
Here is attempt one using ./config
"~/twin$ make
make -C include
make[1]: Entering directory '/home/chip/twin/include'
make autogen -C Tutf
make[2]: Entering directory '/home/chip/twin/include/Tutf'
make[2]: Nothing to be done for 'autogen'.
make[2]: Leaving directory '/home/chip/twin/include/Tutf'
make autogen -C Tw
make[2]: Entering directory '/home/chip/twin/include/Tw'
make[2]: Nothing to be done for 'autogen'.
make[2]: Leaving directory '/home/chip/twin/include/Tw'
make autogen -C TT
make[2]: Entering directory '/home/chip/twin/include/TT'
m4 -I../../include m4/all.m4h > all_m4.h
/bin/sh: m4: command not found
../../makerules.in:668: recipe for target 'all_m4.h' failed
make[2]: *** [all_m4.h] Error 127
make[2]: Leaving directory '/home/chip/twin/include/TT'
../makerules.in:1047: recipe for target 'autogen-dir-TT' failed
make[1]: *** [autogen-dir-TT] Error 2
make[1]: Leaving directory '/home/chip/twin/include'
makerules.in:1007: recipe for target 'build-dir-include' failed
make: *** [build-dir-include] Error 2
"
Here is the second attempt using make config.
~/twin$ make config
Starting configure for twin 0.6.2_1 ...
/bin/bash scripts/Configure.tty "" ""
Enable shared libraries [Y/n] ? y
Enable shared modules [Y/n] ? y
Enable Unicode support (libTutf) [Y/n] ? y
Use custom mmap() based malloc/free [Y/n] ? y
Use C type 'long long' if supported (not recommended) [y/N] ? y
Use hand-optimized assembler code if available [y/N] ? y
Support remote socket connections (libTw) [y/M/n] ? y
-> Sockets: support gzip compression [y/N] ? y
-> Sockets: thread-safe libs (requires libpthread) [Y/n] ? y
-> Sockets: support non-native architectures [Y/n] ? y
Support Text Toolkit library (libTT) [y/N] ? y
-> HW support: twin, native [y/M/n] ? y
-> HW support: twin + server side libTT [y/M/n] ? y
-> HW support: libTT on twin server side [y/M/n] ? y
-> HW support: gtk [y/m/N] ? n
-> HW support: X11 [y/m/N] ? y
-> HW support: write to xml files [y/M/n] ? y
Window Manager: absolutely needed! [y/M/n] ? m
WM: support ~/.twinrc configuration parser [y/M/n] ? y
-> WM: RC: use mmapped shared file for parser [Y/n] ? y
-> WM: RC: shrink memory when parser finished [Y/n] ? y
Builtin Terminal emulator [y/M/n] ? y
-> Terminal: use Unix98 /dev/pts/* pseudo-ttys [Y/n] ? y
Store server messages into Messages window [Y/n] ? y
HW support: text terminals (Linux console...) [y/M/n] ? y
-> tty support: Linux console (gpm mouse, /dev/vcsa) [Y/n] ? y
-> tty support: use raw keyboard on Linux console [Y/n] ? y
-> tty support: twin own terminal [Y/n] ? y
-> tty support: termcap/ncurses terminal database [Y/n] ? y
HW support: X11 enhanced driver (gfx), uses libXpm [y/m/N] ? y
HW support: X11 [y/m/N] ? y
HW support: twin, native [y/M/n] ? y
HW support: twdisplay client as display [y/M/n] ? y
HW support: libggi [y/m/N] ? n
Server extensions [Y/n] ? y
Server extension: Text Toolkit library (libTT) [y/m/N] ? y
Runtime option: enable shadows [Y/n] ? y
Runtime option: enable blink/high background [y/N] ? y
Runtime option: force always visible cursor [y/N] ? y
Runtime option: autohide menu [y/N] ? y
Runtime option: enable menu information line [Y/n] ? y
Runtime option: arrows can open/close submenus [y/N] ? y
Runtime option: enable screen scrolling [Y/n] ? y
~/twin$ make
building include/Tw/Twautoconf.h
/bin/bash scripts/Configure.tty "" "" < /dev/null > /dev/null ||
/bin/sh scripts/Configure.fallback "" "" < /dev/null > /dev/null
make -C include
make[1]: Entering directory '/home/chip/twin/include'
make autogen -C Tutf
make[2]: Entering directory '/home/chip/twin/include/Tutf'
make[2]: Nothing to be done for 'autogen'.
make[2]: Leaving directory '/home/chip/twin/include/Tutf'
make autogen -C Tw
make[2]: Entering directory '/home/chip/twin/include/Tw'
make[2]: Nothing to be done for 'autogen'.
make[2]: Leaving directory '/home/chip/twin/include/Tw'
make autogen -C TT
make[2]: Entering directory '/home/chip/twin/include/TT'
building include/TT/ttobj.h
/bin/sh: line 2: m4: command not found
building include/TT/ttclass.h
/bin/sh: line 2: m4: command not found
building include/TT/ttobject.h
/bin/sh: line 2: m4: command not found
building include/TT/ttvector.h
/bin/sh: line 2: m4: command not found
building include/TT/ttfield.h
/bin/sh: line 2: m4: command not found
building include/TT/ttmethod.h
/bin/sh: line 2: m4: command not found
building include/TT/ttevent.h
/bin/sh: line 2: m4: command not found
building include/TT/tteventbig.h
/bin/sh: line 2: m4: command not found
building include/TT/ttbitmask.h
/bin/sh: line 2: m4: command not found
building include/TT/tteventmask.h
/bin/sh: line 2: m4: command not found
building include/TT/ttcallback.h
/bin/sh: line 2: m4: command not found
building include/TT/ttlistener.h
/bin/sh: line 2: m4: command not found
building include/TT/tttimer.h
/bin/sh: line 2: m4: command not found
building include/TT/ttcomponent.h
/bin/sh: line 2: m4: command not found
building include/TT/ttdata.h
/bin/sh: line 2: m4: command not found
building include/TT/ttvisible.h
/bin/sh: line 2: m4: command not found
building include/TT/ttlayout.h
/bin/sh: line 2: m4: command not found
building include/TT/ttboxlayout.h
/bin/sh: line 2: m4: command not found
building include/TT/ttborderlayout.h
/bin/sh: line 2: m4: command not found
building include/TT/ttnative.h
/bin/sh: line 2: m4: command not found
building include/TT/ttwidget.h
/bin/sh: line 2: m4: command not found
building include/TT/ttlabel.h
/bin/sh: line 2: m4: command not found
building include/TT/tttooltip.h
/bin/sh: line 2: m4: command not found
building include/TT/ttbuttongroup.h
/bin/sh: line 2: m4: command not found
building include/TT/ttanybutton.h
/bin/sh: line 2: m4: command not found
building include/TT/ttbutton.h
/bin/sh: line 2: m4: command not found
building include/TT/ttcheckbutton.h
/bin/sh: line 2: m4: command not found
building include/TT/ttradiobutton.h
/bin/sh: line 2: m4: command not found
building include/TT/ttanyscroll.h
/bin/sh: line 2: m4: command not found
building include/TT/ttscrollbar.h
/bin/sh: line 2: m4: command not found
building include/TT/ttslider.h
/bin/sh: line 2: m4: command not found
building include/TT/ttprogressbar.h
/bin/sh: line 2: m4: command not found
building include/TT/ttscrollpane.h
/bin/sh: line 2: m4: command not found
building include/TT/ttwindow.h
/bin/sh: line 2: m4: command not found
building include/TT/ttframe.h
/bin/sh: line 2: m4: command not found
building include/TT/ttscroller.h
/bin/sh: line 2: m4: command not found
building include/TT/ttmenuitem.h
/bin/sh: line 2: m4: command not found
building include/TT/ttcheckmenuitem.h
/bin/sh: line 2: m4: command not found
building include/TT/ttradiomenuitem.h
/bin/sh: line 2: m4: command not found
building include/TT/ttmenu.h
/bin/sh: line 2: m4: command not found
building include/TT/ttmenubar.h
/bin/sh: line 2: m4: command not found
building include/TT/ttanytext.h
/bin/sh: line 2: m4: command not found
building include/TT/tttextfield.h
/bin/sh: line 2: m4: command not found
building include/TT/tttextarea.h
/bin/sh: line 2: m4: command not found
building include/TT/tttheme.h
/bin/sh: line 2: m4: command not found
building include/TT/ttapplication.h
/bin/sh: line 2: m4: command not found
m4 -I../../include m4/list.m4h > list_m4.h
/bin/sh: m4: command not found
../../makerules.in:668: recipe for target 'list_m4.h' failed
make[2]: *** [list_m4.h] Error 127
make[2]: Leaving directory '/home/chip/twin/include/TT'
../makerules.in:1047: recipe for target 'autogen-dir-TT' failed
make[1]: *** [autogen-dir-TT] Error 2
make[1]: Leaving directory '/home/chip/twin/include'
makerules.in:1007: recipe for target 'build-dir-include' failed
make: *** [build-dir-include] Error 2
The system is Debian on an Allwinner R8 1ghz arm processor with 512mb ram and 4gb flash.
This thread was started to document the discussion, progress, viability, features and capabilities of a twin
server rewrite, focusing on portability, maintainability and a modern, extensible core.
Everybody is encouraged to comment on this thread.
Im really fond of TWIN I think its perfect for use in docker container for my particular use case.
I have build a container and compiled twin seemingly successfully.
But I am having issues with : twin: unable to load display driver module `hw_...
I can only assume this is some sort of dependency issue since both the container and my desktop are F29. IT works great on the desktop.
Could you shed some light on possible next steps to get it working in docker?
Thanks,
When i have the twin terminal open and i go into file>exit it does nothing. Once out of the terminal the Menus seem to work fine.
Just compiled with the latest GIT as of 1/19/2017 on a Raspberry Pi 3 with Rasbian installed. Issue persist on Opensuse 42.2, 42.1, tumbleweed, ubuntu 16.04 on intel hardware, Debian ARM on CHIP, Ubuntu 14.04 on Odroid U2.
Hi there, i love this software. and i had a suggestion like feature request.
You can add Framebuffer Support?
like the "links / links2" web browser, when you run from terminal with
links -g
links2 -g
Distribution name depend. on some are just links in another is links2
And use this for make more graphic the experience. i think if twin can be similar to graphical desktop environment but without x / x11 will be the most recommend option for discontinued hardware.
Hi Boys and Girls,
As a heavy twin user for years, I was eager to test this new version.
Great ! Compiles straight, but complains that "twin_real not found" at launch.
This executable is actually not in the server directory.
Typo in makefile ?
clang++-5.0
emit the following error(the second time I invoked make
, first time it failed too, but I didn't record it. Anyway, the error during link is the same):
Making all in docs
make[1]: Entering directory '/usr/src/twin/docs'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/usr/src/twin/docs'
Making all in include
make[1]: Entering directory '/usr/src/twin/include'
make all-recursive
make[2]: Entering directory '/usr/src/twin/include'
Making all in Tutf
make[3]: Entering directory '/usr/src/twin/include/Tutf'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/usr/src/twin/include/Tutf'
Making all in Tw
make[3]: Entering directory '/usr/src/twin/include/Tw'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/usr/src/twin/include/Tw'
make[3]: Entering directory '/usr/src/twin/include'
make[3]: Leaving directory '/usr/src/twin/include'
make[2]: Leaving directory '/usr/src/twin/include'
make[1]: Leaving directory '/usr/src/twin/include'
Making all in libs
make[1]: Entering directory '/usr/src/twin/libs'
Making all in libTutf
make[2]: Entering directory '/usr/src/twin/libs/libTutf'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/usr/src/twin/libs/libTutf'
Making all in libTw
make[2]: Entering directory '/usr/src/twin/libs/libTw'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/usr/src/twin/libs/libTw'
make[2]: Entering directory '/usr/src/twin/libs'
make[2]: Nothing to be done for 'all-am'.
make[2]: Leaving directory '/usr/src/twin/libs'
make[1]: Leaving directory '/usr/src/twin/libs'
Making all in clients
make[1]: Entering directory '/usr/src/twin/clients'
Making all in mapscrn
make[2]: Entering directory '/usr/src/twin/clients/mapscrn'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/usr/src/twin/clients/mapscrn'
make[2]: Entering directory '/usr/src/twin/clients'
make[2]: Nothing to be done for 'all-am'.
make[2]: Leaving directory '/usr/src/twin/clients'
make[1]: Leaving directory '/usr/src/twin/clients'
Making all in themes
make[1]: Entering directory '/usr/src/twin/themes'
Making all in hw_gfx
make[2]: Entering directory '/usr/src/twin/themes/hw_gfx'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/usr/src/twin/themes/hw_gfx'
make[2]: Entering directory '/usr/src/twin/themes'
make[2]: Nothing to be done for 'all-am'.
make[2]: Leaving directory '/usr/src/twin/themes'
make[1]: Leaving directory '/usr/src/twin/themes'
Making all in server
make[1]: Entering directory '/usr/src/twin/server'
Making all in hw
make[2]: Entering directory '/usr/src/twin/server/hw'
/bin/bash ../../libtool --tag=CC --mode=link clang-5.0 -Ofast -pipe -flto=thin -fomit-frame-pointer -fno-strict-aliasing -pipe -Wall -Wshadow -Wno-uninitialized -Wno-pointer-sign -Wno-unused -Wundef -Wstrict-prototypes -Wcast-qual -Wcast-align -Wpointer-arith -Wbad-function-cast -export-dynamic -export-symbols-regex '^(Init|Quit)Module$' -release 0.8.0 -o libhw_display.la -rpath /usr/local/lib/twin hw_display.lo
/bin/bash ../../libtool --tag=CC --mode=link clang-5.0 -Ofast -pipe -flto=thin -fomit-frame-pointer -fno-strict-aliasing -pipe -Wall -Wshadow -Wno-uninitialized -Wno-pointer-sign -Wno-unused -Wundef -Wstrict-prototypes -Wcast-qual -Wcast-align -Wpointer-arith -Wbad-function-cast -export-dynamic -export-symbols-regex '^(Init|Quit)Module$' -release 0.8.0 -o libhw_X11.la -rpath /usr/local/lib/twin libhw_X11_la-hw_X11.lo ../../libs/libTutf/libTutf.la -lX11
/bin/bash ../../libtool --tag=CC --mode=link clang-5.0 -Ofast -pipe -flto=thin -fomit-frame-pointer -fno-strict-aliasing -pipe -Wall -Wshadow -Wno-uninitialized -Wno-pointer-sign -Wno-unused -Wundef -Wstrict-prototypes -Wcast-qual -Wcast-align -Wpointer-arith -Wbad-function-cast -export-dynamic -export-symbols-regex '^(Init|Quit)Module$' -release 0.8.0 -o libhw_xft.la -rpath /usr/local/lib/twin libhw_xft_la-hw_xft.lo ../../libs/libTutf/libTutf.la -lX11 -lXft -lfreetype
/bin/bash ../../libtool --tag=CC --mode=link clang-5.0 -Ofast -pipe -flto=thin -fomit-frame-pointer -fno-strict-aliasing -pipe -Wall -Wshadow -Wno-uninitialized -Wno-pointer-sign -Wno-unused -Wundef -Wstrict-prototypes -Wcast-qual -Wcast-align -Wpointer-arith -Wbad-function-cast -export-dynamic -export-symbols-regex '^(Init|Quit)Module$' -release 0.8.0 -o libhw_tty.la -rpath /usr/local/lib/twin hw_tty.lo ../../libs/libTutf/libTutf.la -ltinfo -lgpm
/bin/bash ../../libtool --tag=CC --mode=link clang-5.0 -Ofast -pipe -flto=thin -fomit-frame-pointer -fno-strict-aliasing -pipe -Wall -Wshadow -Wno-uninitialized -Wno-pointer-sign -Wno-unused -Wundef -Wstrict-prototypes -Wcast-qual -Wcast-align -Wpointer-arith -Wbad-function-cast -export-dynamic -export-symbols-regex '^(Init|Quit)Module$' -release 0.8.0 -o libhw_twin.la -rpath /usr/local/lib/twin hw_twin.lo ../../libs/libTutf/libTutf.la ../../libs/libTw/libTw.la -lz
libtool: link: /usr/bin/nm -B .libs/hw_display.o | | /bin/sed 's/.* //' | sort | uniq > .libs/libhw_display.exp
../../libtool: eval: line 1719: syntax error near unexpected token `|'
../../libtool: eval: line 1719: `/usr/bin/nm -B .libs/hw_display.o | | /bin/sed 's/.* //' | sort | uniq > .libs/libhw_display.exp'
Makefile:524: recipe for target 'libhw_display.la' failed
make[2]: *** [libhw_display.la] Error 2
make[2]: *** Waiting for unfinished jobs....
libtool: link: /usr/bin/nm -B .libs/libhw_X11_la-hw_X11.o | | /bin/sed 's/.* //' | sort | uniq > .libs/libhw_X11.exp
../../libtool: eval: line 1719: syntax error near unexpected token `|'
../../libtool: eval: line 1719: `/usr/bin/nm -B .libs/libhw_X11_la-hw_X11.o | | /bin/sed 's/.* //' | sort | uniq > .libs/libhw_X11.exp'
Makefile:521: recipe for target 'libhw_X11.la' failed
make[2]: *** [libhw_X11.la] Error 2
libtool: link: /usr/bin/nm -B .libs/hw_tty.o | | /bin/sed 's/.* //' | sort | uniq > .libs/libhw_tty.exp
../../libtool: eval: line 1719: syntax error near unexpected token `|'
../../libtool: eval: line 1719: `/usr/bin/nm -B .libs/hw_tty.o | | /bin/sed 's/.* //' | sort | uniq > .libs/libhw_tty.exp'
Makefile:533: recipe for target 'libhw_tty.la' failed
make[2]: *** [libhw_tty.la] Error 2
libtool: link: /usr/bin/nm -B .libs/hw_twin.o | | /bin/sed 's/.* //' | sort | uniq > .libs/libhw_twin.exp
../../libtool: eval: line 1719: syntax error near unexpected token `|'
../../libtool: eval: line 1719: `/usr/bin/nm -B .libs/hw_twin.o | | /bin/sed 's/.* //' | sort | uniq > .libs/libhw_twin.exp'
Makefile:536: recipe for target 'libhw_twin.la' failed
make[2]: *** [libhw_twin.la] Error 2
libtool: link: /usr/bin/nm -B .libs/libhw_xft_la-hw_xft.o | | /bin/sed 's/.* //' | sort | uniq > .libs/libhw_xft.exp
../../libtool: eval: line 1719: syntax error near unexpected token `|'
../../libtool: eval: line 1719: `/usr/bin/nm -B .libs/libhw_xft_la-hw_xft.o | | /bin/sed 's/.* //' | sort | uniq > .libs/libhw_xft.exp'
Makefile:539: recipe for target 'libhw_xft.la' failed
make[2]: *** [libhw_xft.la] Error 2
make[2]: Leaving directory '/usr/src/twin/server/hw'
Makefile:776: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/usr/src/twin/server'
Makefile:527: recipe for target 'all-recursive' failed
make: *** [all-recursive] Error 1
I just cloned your repo(1d17f1e2504cc63fb7fb3df1ba174d9284f4ebf8
) and used clang-5.0
with CFLAGS
== -Ofast -pipe -flto=thin
and CPPFLAGS
== CFLAGS
.
My machine is using Debian 9.4
with linux kernel 4.9.0-6-amd64
.
Recieved the following error when trying to open twin:
/usr/local/bin/twin_server: error while loading shared libraries: libTutf.so.0: cannot open shared object file: No such file or directory
After running this command I found on a forum post, it was able to open:
sudo cp /usr/local/lib/libTutf.so.0 /usr/lib
I would like to point out that identifiers like “_TWIN_H
” and “_TW_PLUS_PLUS_H
” do not fit to the expected naming convention of the C++ language standard.
Would you like to adjust your selection for unique names?
The repository mentions contact information that seems outdated:
Not Found
454 4.7.1 <[email protected]>: Relay access denied
Could it be interesting/useful?
Twin already supports Linux ARM (32 and 64 bit) and with the help of termux or sth similar it should be quite feasible... the real issue is: would it be usable?
This was reported by Mirppc in issue #4:
"Problem in my case isnt SSH. If i boot to runlevel 3 or init 3 i get the issues with Twin. This isnt an SSH issue as i am not using xterm. i am in a TTY session locally."
This is unexpected. As I wrote in issue #4, I need the following to troubleshoot the problem:
shm.c:50:9: warning: 'ALIGN' macro redefined [-Wmacro-redefined]
#define ALIGN 15
^
/usr/include/machine/param.h:81:9: note: previous definition is here
#define ALIGN(p) _ALIGN(p)
I am building a demo environment with TWIN. To that end, I am creating windows from menu items and found two ways this could be improved.
(1) Is there a way to set window titles in ExecTty
? It could help when setting applications in AddToMenu
, to keep windows apart. I suspect I can send a message somewhere, but can't find the documentation about what goes where. The message sending is a powerful idea that could really use some documentation (especially, a list of possibilities).
(2) In AddToMenu
, multiple commands with surrounding brackets might be helpful to avoid the somewhat tedious need to declare AddToFunc
and pick a name for any multiple-step action. This may be generally useful, by saying
func : ...
| '(' func_list ')'
;
func_list : func
| func_list func
;
This was reported in #44, but is an unrelated issue.
Tracking it here since #44 should be solved now.
The reported error is: if tty is /dev/console, twin complains that
starting display driver module `hw_tty' . . .
GPM_InitMouse() failed: unable to detect tty device
xterm_InitMouse() failed: this `linux' terminal
has no support for xterm-style mouse reporting.
I rarely work in an environment w/o 256 color support and have gotten used to vim w/ more than 16 colors, so I'd be interested in adding support to emulate xterm-256color in twin. Any thoughts about how difficult this would be? Suggestions about where to focus in the twin code base?
FYI, a secondary reason for emulating xterm-256color is I like 'set cursorline' in vim - but with TERM=linux, instead of underlining it turns off syntax highlighting on the current line. The vim documentation mentions that this is due to limitation in some terminal types. I confirmed this appears to be due to TERM=linux (not a bug in twin) by reproducing the behavior in a linux virtual console.
I'm running Finch in twin and it uses arrow keys to navigate and move some of the TUI elements.
However when I use the arrow keys in twin, it returns capital letters instead of the actual arrow key map.
e.g. Up is A, down is B, right is C and left is D.
The same occurs when using the numberpad with num lock off.
$twstart
twfindtwin: error while loading shared libraries: libTw.so.4: cannot open shared object file: No such file or directory
/usr/local/bin/twin_real: error while loading shared libraries: libTutf.so.0: cannot open shared object file: No such file or directory
./configure seemed ok
make had many warnings but completed and said I should do make install
sudo make install completed as well -
Hello Max,
would be great to have Toggle option for FullScreen / Maximize commands to allow quickly switch back from maximized window size to the previous one (e.g. save current window size & position before FullScreen/Maximize is involved within window internals, and then restore them on Toggle switch)..
Rgds,
-Dimitri
Is it at all possible to re add support for twinutils or the Twin XMMS? Now with Pulse Audio having a Ncurses interface (PAmix here on github) having audio control might just be a bit more feasible. This thread will just be a post with some brainstorming ideas and likely some place to post neat ncurses programs that might be useful to look at for the twin project. If not integrating them into twin somehow, at least looking at how they are coded and maybe learning something that will help enhance the project. You never know, someone else might have found a cleaner better way of implementing something.
Just a thought.
Needed to add 'autoreconf -f -i' before './configure/ before it would compile on my Ubuntu machine, just reporting the issue
Hi cosmos72,
I have made a list of issues I experienced while using mouse-compatible applications within twin:
I recorded each of them on video:
https://drive.google.com/open?id=1TyOCcDS_4xAlU3yAgfsmrV9RQk9VO6lX
https://drive.google.com/open?id=1om5K_AJANkHPs5tNWaYTKN9gTKQwfuYR
https://drive.google.com/open?id=1RYnV1NWR2nyzuj_tibLJpGU79J-488gi
Of course these are not extremely important issues and twin is still usable with them. Only mouse-compatible applications seem to be affected by it.
Have a merry Xmas!
It looks from my initial experiments that truetype fonts are not supported. If that true? Any idea how hard it would be to add support? Thanks!
I'm very curious what is so special TWIN is doing to disable copy/paste selection via mouse to the system clipboard ?..
so, what is so special TWIN is doing in the window to block the system clipboard ?..
currently the only workaround I found to paste the selected text to my clipboard is to detach TWIN, select what I need, see it appeared in my clipboard, then re-attach TWIN again.. -- but this is rather looking dumb ;-))
so :
and as a side note : will be great also to allow a "Paste" action to be involved via Key combinations (not only via mouse button)..
Thanks a lot for your help !
Rgds,
-Dimitri
I am trying to compile on Ubuntu trusty and get lots of compiler errors. Any suggestions as to how to build?
From a long time I wanted to test "AddScreen" feature in TWIN, and here is my feedback:
how to reproduce it:
add into .twinrc the following:
# add Screen 2
AddScreen 2
# background
Background 2 Black (
" "
)
# menu
AddToMenu " Window " (
" Move " Interactive Move
" Resize " Interactive Resize
" Scroll " Interactive Scroll
" Center " Center
" Maximize " Maximize
" Full Screen " FullScreen
" Roll Up " Roll Toggle
"" Nop
" Send to Screen #1 " SendToScreen 1
" Send to Screen #2 " SendToScreen 2
"" Nop
" Raise/Lower " RaiseLower
" UnFocus " Focus Off
" Next " _Next
" WinList... " WindowList
"" Nop
" Refresh " Refresh
" Send Pause " SyntheticKey Pause
"" Nop
" Close " Close
"" Nop
" Kill Client " Kill
)
start TWIN, open Term, and then from Window menu try to send it to Sceeen 2.
Rgds,
-Dimitri
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.