Как заставить Remmina захватить все «специальные» ключи с помощью GNOME в Ubuntu 18.04?

Использование {}в строчном скрипте -, выполняемом через find, является уязвимостью, связанной с внедрением кода. Не делай этого. Первый аргументsh -c(сценария )должен быть заключен в одинарные кавычки, а аргументы этого сценария должны передаваться в его командной строке.

Вместо этого напишите команду findпримерно так: (использует bashвместо sh, чтобы иметь возможность использовать ${parameter//pattern/word}в одном месте):

find stdlib/main -type f -exec bash -c '
    for pathname do
        string=${pathname#stdlib/main/} # delete initial path
        string=${string%.*}             # delete suffix after last dot
        string=${string////.}           # change slashes to dots

        # output:
        printf "resource:\"%s,%s\"\n" "$pathname" "$string"
    done' bash {} +

Вместо использования sedиспользуется подстановка параметров для изменения имен путей, найденных с помощью find. Скрипт в строке -bashбудет выполняться для пакетов найденных файлов и будет перебирать пути в каждом пакете. printfвыведет данные, преобразованные так же, как ваша команда sed(, если мне удастся правильно их расшифровать, это не просто то, что вы описали ).

То, как вы впоследствии справляетесь с именами файлов, содержащими двойные кавычки и запятые, — это другой вопрос. (вывод строки после resource:может оказаться трудным для синтаксического анализа ).

Проще всего было бы поместить команду findв отдельный скрипт и вызывать ее из GNU makeв $(shell...), иначе получится что-то вроде

STDLIB_RESOURCES := $(shell     \
find stdlib/main -type f -exec bash -c '    \
    for p do                                \
        s=$${p\#stdlib/main/};              \
        s=$${s%.*};                         \
        s=$${s////.};                       \
        printf "resource:\"%s,%s\"\n" "$$p" "$$s"; \
    done' bash {} + )

в вашем Makefile (из-за того, как GNU makeобрабатывает переменные и т. д. )Также обратите внимание на :=. Это нужно для того, чтобы команда выполнялась сразу после присвоения переменной,не каждый раз при доступе к переменной.

Связанные:

2
07.04.2020, 14:49
2 ответа

Для этого есть другой обходной путь. У меня было такое же поведение в xfreerdp. Я нашел решение на Reddit:

https://www.reddit.com/r/archlinux/comments/elp2lf/cant_grab_input_in_fullscreen_apps_like_vms/

Я запускаю в своем терминале следующее:

settings set org.gnome.mutter.wayland xwayland-grab-access-rules "['xfreerdp']"

Теперь ключи работают, и я могу продолжать пользоваться Wayland.

1
28.04.2021, 23:18

Это был долгий путь, но я решил, что должен попробовать.

GNOME использует Wayland в качестве сервера отображения по умолчанию. Но был шанс, что это было основной причиной моих проблем, (это было, читайте дальше ).

Итак, я решил перенастроить свой GNOME для использования Xorg в качестве сервера отображения, основываясь на этой статье Fedora -. Шаги следующие:

  • Откройте /etc/gdm/custom.confи раскомментируйте WaylandEnable=false.
  • Добавьте следующую строку в секцию [daemon]:
    DefaultSession=gnome-xorg.desktop
  • Сохраните файл custom.conf.

После перезапуска сеанса GNOME режим «Захват всех событий клавиатуры» работает как чудо.


С 20.04 и упакованной версией Remmina все работает нормально, несмотря на использование Wayland.

1
28.04.2021, 23:18

Теги

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