Basta colocar exec "$@" no final do seu xinitrc e, em seguida, executar
startx /path/to/xinitrc <wm> <wm-args>
de um tty.
startx interpreta seu primeiro argumento de string como o cliente ( /path/to/xinitrc , observe que ele deve ser um caminho absoluto), e os demais argumentos são passados para esse cliente (wm e wm-args), que são exec ed pelo xinitrc.
Observe que o startx é apenas um exemplo de script e você é incentivado a criar outro de acordo com suas necessidades. A configuração acima mencionada deve atender aos requisitos mencionados na questão.