唐京兆万年(今陕西西安)人,字城武。大历时任监察御史,旋随凤翔陇右节度使张镒为营田判官,又经知陇州行营留后事。建中四年(783)守陇州,拒叛将朱此伪命。次年,升任左金吾卫将军,迁大将军。贞元元年(785)任剑南西川节度使。他遣使与南诏通好,多次击败吐蕃,收复崔州(今四川西昌)等地。在蜀凡二十一年,虽有建树,而赋敛颇重。顺宗时王叔文当政,他要求兼领剑南三川,未成,即上表请太子(宪宗)监国。不久暴病死。