A maneira mais fácil de fazer isso seria usar wmctrl . Você pode ler man wmctrl
para ver como usá-lo.
sudo apt-get install wmctrl
Você pode basicamente vincular a linha de comando a uma classe 'Window' e adicionar métodos a ela que usam comandos wmctrl em segundo plano.
class Window
@@windows = []
def self.windows
@@windows
end
def self.get_windows
@@windows.clear
'wmctrl -l'.split("\n").map do |str|
@@windows << self.class.new(str.split(' ')*)
end
end
def initialize window_id, desktop_id, client_machine, window_title
#set up object here
end
#add other methods here
end
Esse deve ser um bom ponto de partida. Não foi testado nem nada, mas você deve ser capaz de resolver isso daqui. Agora você pode adicionar métodos de instância, por exemplo. change_geometry
, que pode utilizar a opção -r <WIN> -e <MVARG>
.
Você deve se familiarizar com os canais e IO em geral antes de fazer isso.
Talvez quando você tiver realizado o que você precisa, você pode distribuir isso como uma biblioteca ruby e empacotá-lo para Debian / Ubuntu.