Как повернуть окно в X11

Это бессмысленно.

Так обрабатывается ksh93 , если для унарного оператора слишком много аргументов и унарный оператор начинается с - , тогда второй будет выбран в качестве аргумента и остальные будут проигнорированы:

$ ksh -c '[ -f a.out foo bar ] && echo yes'
yes
$ ksh -c '[ -e a.out foo a ] && echo yes'
yes

(За исключением случаев, когда второй аргумент -a / -o , он не будет проигнорирован)

Проверка источника ksh93 test подтверждают такое поведение.

Также выполняется strace :

$ { strace -p "$$" & sleep 1; [ -f a.out -size +0 ]; kill "$!"; }
[1] 18467
Process 18455 attached
restart_syscall(<... resuming interrupted call ...>) = 0
stat(".", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("a.out", {st_mode=S_IFREG|0755, st_size=8320, ...}) = 0
kill(18467, SIGTERMProcess 18455 detached
 

Другие оболочки, подобные Борну, сообщают об ошибке в этом случае. Поведение не определено POSIX.


Если вы хотите проверить, существует ли файл и имеет ли его размер больше 0, то стандартные оболочки имеют тестовый оператор -s :

[ -s file ] && echo 'file exist and size greater than 0'

ksh88 также ведут себя так же. С моей виртуальной машиной Solaris 10:

$ ksh -c '[ -f a.out foo bar ] && echo yes'
yes
$ strings /usr/bin/ksh | grep -i version
@(#)Version M-11/16/88i

оболочки Pre-POSIX также ведут себя так же, включая оболочку Bourne в Solaris 10, семейную оболочку Bourne, Schily osh и Schily sh.

5
30.03.2017, 00:28
2 ответа

Я немного поискал, и я удивлен, что не нашел готового решения для этого. Можно было бы использовать KWin и написать для него «эффект Квина»: https://blog.martin-graesslin.com/blog/2009/07/how-to-write-a-kwin-effect/ . Кроме того, возможно расширение оболочки gnome, но оно еще не существует.

Обходной путь: Weston — эталонная реализация Wayland. Это позволяет вращать окна с помощью супер-клавиши + средней кнопки мыши. Поскольку это работает только для клиентов Wayland, вы можете запускать Xwayland в Weston, запускать X-приложение в Xwayland и поворачивать дисплей Xwayland. Если ваше приложение поддерживает Wayland (например, на основе GTK3, QT5 или SDL), это работает в Weston без Xwayland.

Для X-приложений в Xwayland

weston
WAYLAND_DISPLAY=wayland-0 Xwayland :5
DISPLAY=:5 yourXapplication
DISPLAY=:5 x-window-manager  # additionally run a window manager for comfort

(В Gnome-Wayland вы можете запускать Xwayland напрямую без использования Weston, но я не знаю о опции Gnome-Wayland для поворота окна).

Для приложений QT5 без Xwayland:

weston
WAYLAND_DISPLAY=wayland-0  QT_QPA_PLATFORM=wayland  yourQT5application

Для приложений GTK3 и SDL без Xwayland:

weston
WAYLAND_DISPLAY=wayland-0 yourGTK3application

(Примечание. Вы можете указать сокет wayland/WAYLAND_DISPLAY с помощью weston --socket=mywaylandsocket вместо предположения это будет wayland-0. Вам нужно сделать это на Gnome-Wayland, так как он использует сам wayland-0)

3
27.01.2020, 20:40

Я добавляю второй ответ, используя Уэстон, немного отличающийся и более полезный, чем мой первый. Создайте файл ~/.config/weston.ini со следующим содержимым:

[core]
modules=xwayland.so
shell=desktop-shell.so
idle-time=0
[shell]
background-color=0xff002244
locking=false
# panel-location=none    
[launcher]
icon=/usr/share/icons/gnome/24x24/apps/utilities-terminal.png
path=/usr/bin/weston-terminal
[launcher]
icon=/usr/share/icons/hicolor/48x48/apps/firefox.png
path=/usr/bin/firefox
[output]
name=X1
mode=600x800
transform=90
# wanna get mad? use: transform=flipped-270
scale=1

Этот weston.ini включает безрутовый xwayland.so в weston. Раздел [output] с name=X1 определяет внешний вид Weston как X-клиента.

  • mode=600x800 устанавливает размер экрана/окна.
  • transform=90 поворачивает дисплей Вестона.
  • scale=1 устанавливает коэффициент масштабирования, если необходимо.
  • разделы [launcher] можно использовать для создания пользовательских стартовых панелей для ваших X-приложений.

См. man weston.ini и /usr/share/doc/weston/examples/weston.ini для получения дополнительной информации и вариантов.

(Вместо того, чтобы использовать панель weston, вы можете отключить ее с помощью panel-location=none, проанализировать вывод weston для прослушивания xserver на дисплее: 1 и использовать DISPLAY=:1 вашеXapp)

1
27.01.2020, 20:40

Теги

Похожие вопросы