2024-09-11 14:58:31 +02:00
|
|
|
|
XRSH Manual
|
|
|
|
|
===========
|
|
|
|
|
|
2024-09-15 11:18:36 +02:00
|
|
|
|
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
|
|
|
|
. . ____ _____________ ________. ._. ._. . . . . . . . .
|
|
|
|
|
. . _\ \/ /\______ \/ _____// | \. . . . . . . .
|
|
|
|
|
. . _ \ / | _/\_____ \/ ~ \ . . . . . . .
|
|
|
|
|
_ _ / \ | | \/ \ Y / _ _ _ _ _ _ _
|
|
|
|
|
. . /___/\ \ |____|_ /_______ /\___|_ /. . . . . . . .
|
|
|
|
|
. . . . . .\_/. . . . \/ . . . .\/ . . _ \/ . . . . . . . .
|
|
|
|
|
▬▬▬▬ https://xrsh.isvery.ninja ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
|
|
|
|
|
|
|
|
|
|
Open, local-first, polyglot, unix hackable & selfcontained XR apps.
|
|
|
|
|
Using worlds first WebXR linux distro.
|
|
|
|
|
|
|
|
|
|
credits: NLnet | @nlnet@nlnet.nl https://nlnet.nl/project
|
|
|
|
|
all FOSS devs | copy.sh (v86) aframe.io (AFRAME)
|
|
|
|
|
Leon van Kammen | @lvk@mastodon.online
|
|
|
|
|
Fabien Benetou | @utopiah@mastodon.pirateparty.be
|
|
|
|
|
|
|
|
|
|
# Getting started
|
|
|
|
|
|
|
|
|
|
Please hook up your (bluetooth) keyboard to use xrsh.
|
|
|
|
|
|
|
|
|
|
> tip use ctrl+a+0/1/2/3/.. to switch (GNU) screen terminals (and ctrl+a+c to create new ones)
|
|
|
|
|
|
|
|
|
|
| usecase | command |
|
|
|
|
|
|-----------------------|--------------------------------------------------------|
|
2024-09-17 19:02:07 +02:00
|
|
|
|
| require <URL> | adds javascript or CSS url to DOM |
|
2024-09-15 11:18:36 +02:00
|
|
|
|
| js run | js 'alert("hello")' |
|
|
|
|
|
| js console.log: | console document.baseURI |
|
|
|
|
|
| js inspect: | js "return document.baseURI" |
|
|
|
|
|
|
|
|
|
|
# Polyglot environment
|
|
|
|
|
|
|
|
|
|
Currently the following languages are supported:
|
|
|
|
|
|
|
|
|
|
* shellscript (busybox sh)
|
|
|
|
|
* awk (busybox awk v1.33.0)
|
|
|
|
|
* python (micropython)
|
|
|
|
|
* javascript (via your browser)
|
|
|
|
|
* lua (5.3.6)
|
|
|
|
|
|
|
|
|
|
> TIP: type `ls -la ~/hook.d/alert/*` for examples
|
|
|
|
|
|
|
|
|
|
# Editors
|
|
|
|
|
|
|
|
|
|
* vi (busybox vi)
|
|
|
|
|
* nano (busybox nano)
|
|
|
|
|
* mg (microemacs)
|
|
|
|
|
|
|
|
|
|
# Boot sequence
|
|
|
|
|
|
|
|
|
|
The following files are loaded during boot (via `/etc/profile`)
|
|
|
|
|
|
|
|
|
|
| file | info |
|
|
|
|
|
|-----------------------|---------------------------------------------------|
|
|
|
|
|
| /etc/profile.xrsh | sets up xrsh environment |
|
|
|
|
|
| /etc/profile.sh | global shellscript functions |
|
|
|
|
|
| /etc/profile.js | global javascript functions |
|
|
|
|
|
| /mnt/profile.browser | environment vars set by browser (`echo $HOSTNAME`)|
|
|
|
|
|
| /root/.profile | user shellscript functions/settings |
|
|
|
|
|
| /root/.profile.js | user javascript functions |
|
|
|
|
|
| /root/.screenrc | GNU screen initialisations |
|
|
|
|
|
| https://.../#ls | URI fragment is executed as command in own screen |
|
|
|
|
|
|
|
|
|
|
> TIP: to keep things portable with future versions of XRSH: modify files in `/root/*`
|
|
|
|
|
|
|
|
|
|
# Calling terminal from javascript
|
|
|
|
|
|
|
|
|
|
```javascript
|
2024-10-23 18:51:56 +02:00
|
|
|
|
const term = document.querySelector('[isoterminal]').components.isoterminal.term
|
2024-09-15 11:18:36 +02:00
|
|
|
|
term.exec("ls -la")
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
# Calling javascript from terminal
|
|
|
|
|
|
|
|
|
|
Various options:
|
|
|
|
|
|
|
|
|
|
1. Just add the `#!/bin/js` shebang to the top of a javascript file (+ chmod +x)
|
|
|
|
|
2. Run `js "alert('hello')"` in the shell
|
|
|
|
|
3. Run `jsh alert hello` in the shell
|
|
|
|
|
4. Run `jsh` to start an interactive shell
|
|
|
|
|
|
|
|
|
|
# Hybrid Terminal/Browser Events
|
|
|
|
|
|
|
|
|
|
Events are automatically triggering scripts in `/root/hook.d/{eventname}/*`
|
|
|
|
|
|
|
|
|
|
> They can be triggered by the following ways
|
|
|
|
|
|
|
|
|
|
1. from shellscript: `hook myevent` (will trigger **executable** files in /root/hook.d/myevent)
|
|
|
|
|
2. from javascript: `isoterminal.exec("hook myevent")` (idem)
|
|
|
|
|
3. via jsh: `jsh alert hello` (will trigger **executable** files in /root/hook.d/alert)
|
|
|
|
|
|
|
|
|
|
These are various ways to enable hybrid eventing between browser and terminal (languages).
|
|
|
|
|
|
2024-09-11 14:58:31 +02:00
|
|
|
|
# Multiple terminals [GNU screen]
|
|
|
|
|
|
|
|
|
|
## From the cmdline
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
xrsh # screen –DR # list of detached screen
|
|
|
|
|
xrsh # screen –r PID # attach detached screen session
|
|
|
|
|
xrsh # screen –dmS Myses # start a detached screen session
|
|
|
|
|
xrsh # screen –r MySes #attach screen session with name MySession
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Basics
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
ctrl a c -> create new window
|
|
|
|
|
ctrl a A -> set window name
|
|
|
|
|
ctrl a w -> show all window
|
|
|
|
|
ctrl a 1|2|3|… -> switch to window n
|
|
|
|
|
ctrl a " -> choose window
|
|
|
|
|
ctrl a ctrl a -> switch between window
|
|
|
|
|
ctrl a d -> detach window
|
|
|
|
|
ctrl a ? -> help
|
|
|
|
|
ctrl a [ -> start copy, move cursor to the copy location, press ENTER, select the chars, press ENTER to copy the selected characters to the buffer
|
|
|
|
|
ctrl a ] -> paste from buffer
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Advanced
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
ctrl a S -> create split screen
|
|
|
|
|
ctrl a TAB -> switch between split screens
|
|
|
|
|
ctrl a Q -> Kill all regions but the current one.
|
|
|
|
|
ctrl a X -> remove active window from split screen
|
|
|
|
|
ctrl a O -> logout active window (disable output)
|
|
|
|
|
ctrl a I -> login active window (enable output)
|
|
|
|
|
```
|