洛阳当时由司马颛的部将张方控制,张方又挟持晋惠帝,司马颖等人到司马颙的地头长安,司马颙废除司马颖的皇太弟地位,要司马颖离开朝廷回其封地。司马颙自行选置百官,改秦州为定州。
司马颙又让晋惠帝下诏,要立远在东海的司马越为太傅,要司马越回朝与太宰司马颛共同辅政,司马越不受。
司马颖的故将公师藩、汲桑等人欲起兵迎接司马颖。司马颙见到司马颖还有人支持,于是复拜司马颖为镇军大将军、都督河北的军事,给兵千人,让其回去镇守邺城。但司马颖到达洛阳,还没回到封地时,司马越就起兵了。司马颖则逃回长安。
以东海的中尉刘洽劝司马越发兵讨伐司马颙,司马越答应,以刘治为左司马,以东海的尚书曹馥为军司。
永兴二年(公元305年)司马越出兵后,先前司马越逃命时不接纳他的东平王司马楙很是恐慌,于是把徐州让给司马越。司马越让自己部下当徐州都督,把司马楙调去当兖州刺史。司马越的三个亲弟弟也兴兵各据一方。于是司马越声势大振,很多官员都投奔司马越。
司马颙挟持晋惠帝,发诏书要罢免司马越等人。司马越就打出“张方劫迁车驾,天下怨愤,欲奉迎大驾,还复旧都洛阳”的名义,继续进兵。
司马越又派人游说司马颙,只要司马颙送帝还都,就与颛分陕而居。司马颙欲从之,但张方不同意。
张方做出建议:“ 称张方本身还拥有士兵十余万众,可以亲自送晋惠皇回洛阳宫中,以堵司马越之口。然后让司马颖回邺城掌权,司马颙可留守关中。而后张方出兵北伐博陵。这样一来,局势就比较稳定,天下再也没有帮助司马越者。”
司马颙不赞同张方的建议,命豫州刺史刘乔为镇东大将军。派遣司马颖率领楼褒、王闸等,据河桥以抗拒司马越。
司马越亲自率领3万士兵,西进到了萧县。刘乔派遣其儿子刘祐抗拒司马越,司马越军战败。这时范阳王司马虓(注: 非八王之一)派遣督护田微以800骑兵帮助司马越,在谯与刘祐相遇,一战之下刘祐众溃,司马越进屯阳武。
消息传到长安,人心惶惶,司马颙非常恐慌,于是命令张方的亲信将领郅辅夜里暗杀张方,然后派人把张方的头颅送到司马越军中,认为这可以平息祸乱。而后司马颙又后悔,怪罪郅辅杀张方,又杀了郅辅。然后派遣刁默守潼关。