O problema é que o alias é primeiro interpretado pelo Bash e depois pelo XTerm.
O Bash interpreta todo o alias como dois comandos separados: xterm -e sudo /opt/king-phisher/KingPhisherServer -L INFO -f /opt/king-$/king-phisher/server_config.yml e /opt/king-phisher/KingPhisher , e os comandos são executados um após o outro no shell atual.
Usar & em vez de ; não ajudará, porque o Bash ainda interpretará & ; O escape de ; ou & também não ajuda, porque o XTerm não tem noção da sintaxe Bash e passará ; ou & como um argumento para /opt/king-phisher/KingPhisherServer (juntamente com o restante do comando, /opt/king-phisher/KingPhisher ).
A única solução é dizer ao XTerm para invocar o Bash e deixar o Bash fazer a análise:
alias kingp="xterm -e bash -c 'sudo /opt/king-phisher/KingPhisherServer -L INFO -f /opt/king-$/king-phisher/server_config.yml & /opt/king-phisher/KingPhisher'"
A menos que o usuário não precise fornecer uma sudo senha para executar /opt/king-phisher/KingPhisherServer , isso fará com que o servidor não inicie devido ao comando sudo ser antecedido antes de poder ler a senha; veja aqui para possíveis soluções: Como executo um comando sudo precisando de entrada de senha em segundo plano? .