Whilst most of this is me barking into the wind; I hate when someone leaves a question open, if they find a solution to their problem.
So, after experimenting I can safely say the dodgey functionality after an xrandr call is down to the window manager being used.
Cinnamon kind of works however; windows and menus are placed in the natural screen area, the top 480px. The panel can’t be dropped to the bottom of the screen. It all feels a bit hacky and a bit not satisfactory.
However, thanks to OrangeTide pointing me in the right direction I now have something I’m happy with.
Solution
I now have a setup which allows for vertical panning, with the wallpaper spanning the whole screen area, and windows & menus placed anywhere on the virtual screen area.
I dropped the requirement of also scaling by 1.2x because the more I’ve worked with the devterm the less I like that idea.
I like this solution, it gives me as much vertical screen space as I want. I think it could be equally adapted to panning horizontally.
Caveat
The only caveat is that the solution involves using a hackable/customisable window manager. A wm where the screen resolution can be updated via a script. In this instance I’ve opted for awesome-wm, it works, it suits the DevTerm and I like it.
Steps
Install AwesomeWM
https://awesomewm.org/
I opted for getting rid of the DisplayManager and just using startx. (sudo systemctl disable lightdm
)
With a ~/.xinitrx
:
# … other stuff
# turn off x display sleeping to avoid having to reboot when the screen doesnt wake up properly
xset s off -dpms
# resize screen
xrandr --fb 1280x720 --output 480x1280 --panning 720x0 --rotate right
# start awesome
# with logging piped somewhere to cat it later
exec awesome 2>&1 $HOME/.cache/awesome/awesome.log
FakeResize screen in awesome
Awesome uses an rc.lua file to set up config & theming. It also has a resize for virtual screen sizing, this worked for me:
-- … your other config
awful.screen.connect_for_each_screen(function(s)
local geom = s.geometry
if geom.height == 480
then
s:fake_resize(geom.x, geom.y, 1280, 720)
end
end)
Ignoring the messyness & hard coded-ness that works^… just need to clean it up and consider sharing it.
Summary
I’m pretty sure the reson this is an issue is because window managers are written to handle multiple screens over panning.
It’s much more common to spend lots of development hours making multiple screens work well rather than one screen pan, because it’s much more common nowadays to have multiple screens than one diddy screen.
So, this is an option, another would be to test out other window managers and hope. I tested xfwm4, gnome, cinnamon, gnome-classic, some others, none had good support for panning.
Other WMs probably support this but awesome was where I landed. It feels firmly like a devterm issue that should be resolved if DevTerm is gonna be much more than a toy. Damn glad I have something I like now.