<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Mon, Mar 20, 2017 at 5:12 AM Zbigniew Jędrzejewski-Szmek <<a href="mailto:zbyszek@in.waw.pl">zbyszek@in.waw.pl</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Sun, Mar 19, 2017 at 09:30:05PM +0000, Zbigniew Jędrzejewski-Szmek wrote:<br class="gmail_msg">
> On Sun, Mar 19, 2017 at 04:37:53PM +0000, arnaud gaboury wrote:<br class="gmail_msg">
> > I am trying with no success to have one background terminal color for the<br class="gmail_msg">
> > host and another one for the container.<br class="gmail_msg">
> ><br class="gmail_msg">
> > Some settings:<br class="gmail_msg">
> > - on host:<br class="gmail_msg">
> > window manager : i3<br class="gmail_msg">
> > terminal : urxvt-256<br class="gmail_msg">
> ><br class="gmail_msg">
> > -on container:<br class="gmail_msg">
> > no X, it is a server.<br class="gmail_msg">
> ><br class="gmail_msg">
> > Until now, I have tried to write a wrapper script to urxvt on host. This<br class="gmail_msg">
> > script is to test value of $HOST or $TERM, then fire urxvt with background<br class="gmail_msg">
> > color as option. This does not work.<br class="gmail_msg">
> ><br class="gmail_msg">
> > I have to figure out  that when i log my container, I am first on an urxvt<br class="gmail_msg">
> > terminal which become, once I am logged as user on container, a xterm.<br class="gmail_msg">
> > I am totally lost where to write instruction as the terminal color<br class="gmail_msg">
> > background: on host or container? and what app shall be tested to set the<br class="gmail_msg">
> > environment and decide the bg color (agetty?) ?<br class="gmail_msg">
><br class="gmail_msg">
> Are you starting the container manually using systemd-nspawn in a terminal<br class="gmail_msg">
> emulator window? </blockquote><div><br></div><div>Not really. The container is started at machine boot with systemd-nspawn@container.service. Then, in one urxvt terminal, I log into the container with : <br># machinectl login container<br><br></div><div>I have not yet tested your solution, but will do it today and come back wtih the result.<br><br></div><div>Thank you<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">If yes, then the following works (tested with gnome-terminal,<br class="gmail_msg">
> but I think urxvt supports the same sequences):<br class="gmail_msg">
><br class="gmail_msg">
> [Unit]<br class="gmail_msg">
> DefaultDependencies=no<br class="gmail_msg">
> Conflicts=shutdown.target<br class="gmail_msg">
><br class="gmail_msg">
> [Service]<br class="gmail_msg">
> StandardOutput=tty<br class="gmail_msg">
> ExecStart=/usr/bin/printf '\033]11;darkgreen\007'<br class="gmail_msg">
> ExecStop=/usr/bin/printf '\033]11;black\007'<br class="gmail_msg">
> Type=oneshot<br class="gmail_msg">
> RemainAfterExit=true<br class="gmail_msg">
><br class="gmail_msg">
> [Install]<br class="gmail_msg">
> WantedBy=basic.target<br class="gmail_msg">
><br class="gmail_msg">
> (It would be nicer to undo the setting and return to whatever the old<br class="gmail_msg">
> background was, but I don't know how to do this.)<br class="gmail_msg">
I figured it out, although it's a bit ugly ;)<br class="gmail_msg">
<br class="gmail_msg">
==> /etc/systemd/system/bgcolor.service <==<br class="gmail_msg">
[Unit]<br class="gmail_msg">
DefaultDependencies=no<br class="gmail_msg">
Conflicts=shutdown.target<br class="gmail_msg">
Description=Set terminal background<br class="gmail_msg">
<br class="gmail_msg">
[Service]<br class="gmail_msg">
StandardInput=tty<br class="gmail_msg">
StandardOutput=tty<br class="gmail_msg">
ExecStart=/usr/local/bin/bgcolor.sh start /run/bgcolor.txt teal<br class="gmail_msg">
ExecStop=/usr/local/bin/bgcolor.sh stop /run/bgcolor.txt<br class="gmail_msg">
Type=oneshot<br class="gmail_msg">
RemainAfterExit=true<br class="gmail_msg">
<br class="gmail_msg">
[Install]<br class="gmail_msg">
WantedBy=sysinit.target<br class="gmail_msg">
<br class="gmail_msg">
==> /usr/local/bin/bgcolor.sh <==<br class="gmail_msg">
#!/bin/sh -e<br class="gmail_msg">
<br class="gmail_msg">
file="$2"<br class="gmail_msg">
field=11      # background<br class="gmail_msg">
<br class="gmail_msg">
if [ "$1" == "start" ]; then<br class="gmail_msg">
    color="$3"<br class="gmail_msg">
<br class="gmail_msg">
    oldstty=$(stty -g)<br class="gmail_msg">
    stty raw -echo min 0<br class="gmail_msg">
    #          OSC   Ps  ;Pt ST<br class="gmail_msg">
    printf "\033]${field};?\033\\"<br class="gmail_msg">
    IFS=';' read -t1 -r -d '\' answer<br class="gmail_msg">
    echo "$answer" | sed 's/^.*\;//;s/[^rgb:0-9a-f/]//g' >"$file"<br class="gmail_msg">
    stty "$oldstty"<br class="gmail_msg">
<br class="gmail_msg">
    printf "\033]${field};${color}\007"<br class="gmail_msg">
elif [ "$1" == "stop" ]; then<br class="gmail_msg">
    color=$(cat "$file")<br class="gmail_msg">
    printf "\033]${field};${color}\007"<br class="gmail_msg">
fi<br class="gmail_msg">
<br class="gmail_msg">
This will set the background to teal during early boot, storing the<br class="gmail_msg">
original color in the specified file, and reset it back during<br class="gmail_msg">
shutdown. It seems to interfere with the systemd console output<br class="gmail_msg">
(newlines get messed up), and sometimes the restoration does not<br class="gmail_msg">
work. I suspect that both issues are caused by interference of<br class="gmail_msg">
systemd printing to the console concurrently with the script. Most<br class="gmail_msg">
likely putting a verify&retry loop around the query for original<br class="gmail_msg">
color would fix the second issue.<br class="gmail_msg">
<br class="gmail_msg">
Zbyszek<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div></div>